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
Effettuare il binding di date in Blazor
Utilizzare Model as a Service su Microsoft Azure
Gestire undefined e partial nelle reactive forms di Angular
Usare il versioning con i controller di ASP.NET Core Web API
Utilizzare i primary constructor in C#
Usare una container image come runner di GitHub Actions
Utilizzare politiche di resiliency con Azure Container App
Code scanning e advanced security con Azure DevOps
Sviluppare un'interfaccia utente in React con Tailwind CSS e Preline UI
Usare Refit e Polly in Blazor per creare client affidabili e fortemente tipizzati
Usare un KeyedService di default in ASP.NET Core 8
Implementare l'infinite scroll con QuickGrid in Blazor Server