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
Selettore CSS :has() e i suoi casi d'uso avanzati
Change tracking e composition in Entity Framework
Utilizzare il metodo Index di LINQ per scorrere una lista sapendo anche l'indice dell'elemento
Creare una libreria CSS universale: Immagini
Collegare applicazioni server e client con .NET Aspire
Managed deployment strategy in Azure DevOps
Aggiornare a .NET 9 su Azure App Service
Ordinare randomicamente una lista in C#
Gestire eccezioni nei plugin di Semantic Kernel in ASP.NET Core Web API
Fornire parametri ad un Web component HTML
Creare un webhook in Azure DevOps
Usare le navigation property in QuickGrid di Blazor
I più letti di oggi
- a #RealCodeConf4 il 25 maggio a Firenze parleremo di #silverlight4. iscrizioni gratis su http://u.aspitalia.com/g9
- #HTML5 schema per avere l'intellisense su #VS2008 (anche express) http://u.aspitalia.com/ed
- Parallelizzare le chiamate HTTP con async/await e le Promise in JavaScript
- Rendere sicuro l'endpoint di HealthCheck in ASP.NET Core
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!