Lo startup di un'applicazione Silverlight viene gestito da un'istanza della classe Application, impostata a livello di progetto nell'attributo SilverlightAppEntry.
Tale classe espone gli eventi Startup e Exit che sono lanciati rispettivamente all'inizio e alla chiusura; solitamente nello Startup valorizziamo la proprietà RootVisual impostando l'UIElement che rappresenta la vista principale dell'applicazione.
Molto spesso abbiamo la necessità di creare servizi che siano sempre disponibili durante l'esecuzione dell'applicazione, a cui poter fare riferimento per, ad esempio, eseguire il log di alcuni eventi interni, recuperare dei dati in continuo o altro.
Per tale attività possiamo sfruttare la classe Application della nostra applicazione, tuttavia tale classe potrebbe velocemente affollarsi di vari servizi rendendo così difficile la manutenzione e la portabilità, da progetto a progetto, di logiche comodamente riutilizzabili.
A tale supporto abbiamo a disposizione l'interfaccia IApplicationService, la quale espone due metodi StartService e StopService che vengono richiamati in concomitanza degli stessi eventi della classe Application principale.
namespace SilverlightApplication { public class LogService: IApplicationService { public void StartService(ApplicationServiceContext context) { //.. } public void StopService() { //.. } } }
Per far entrare la classe che implementa IApplicationService, (LogService nell'esempio) nel ciclo di vita dell'applicazione dobbiamo registrarla nella collezione ApplicationLifetimeObjects dell'istanza di Application; possiamo fare questa operazione direttamente nel markup del file App.xaml:
<Application xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:SilverlightApplication" x:Class="SilverlightApplication.App"> <Application.ApplicationLifetimeObjects> <local:LogService /> </Application.ApplicationLifetimeObjects> </Application>
In questo modo possiamo avere un'ottima separazione del codice, frazionando al meglio le responsabilità delle classi.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Gestione degli stili CSS con le regole @layer
Utilizzare gRPC su App Service di Azure
Utilizzare un numero per gestire la concorrenza ottimistica con SQL Server ed Entity Framework
Recuperare automaticamente un utente e aggiungerlo ad un gruppo di Azure DevOps
Ordinare randomicamente una lista in C#
Configurare il nome della run di un workflow di GitHub in base al contesto di esecuzione
Testare l'invio dei messaggi con Event Hubs Data Explorer
Estrarre dati randomici da una lista di oggetti in C#
Utilizzare EF.Constant per evitare la parametrizzazione di query SQL
Utilizzare la funzione EF.Parameter per forzare la parametrizzazione di una costante con Entity Framework
Utilizzare una qualunque lista per i parametri di tipo params in C#
Esporre i propri servizi applicativi con Semantic Kernel e ASP.NET Web API
I più letti di oggi
- build 7712 per #wp7 #mango riservata agli sviluppatori, con refresh dei tool su connect. info su http://aspitalia.com/y6
- oggi a partire dalle 16:00, non perdere #connect. tutto sul futuro di #vs, #azure, #aspnet https://aspit.co/azk
- Annunciati gli Office 365 Group Connector in GA! https://aspit.co/build2016 #build2016
- Specificare una proprietà come ContentProperty di un controllo Silverlight 3.0
- Creare una console application con la Universal Windows Platform
- Rilasciata la Preview 3 di ASP.NET MVC