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
Le novità di Entity Framework Core 5
Utilizzare Azure log streaming con ASP.NET Core
Ecco .NET 5: l'alba di una nuova era per lo sviluppatore .NET
Visual Studio Code per lo sviluppo in team
Utilizzare gli operatori di RxJS per gestire operazioni asincrone con Javascript e TypeScript
Utilizzare il metodo TrackGraph per impostare lo stato degli oggetti in un grafo in Entity Framework Core
Applicare filtri alla telemetria di Application Insight con ASP.NET Core
Creare un web server locale con LiveReload
Modificare il behavior del controllo SwipeView in Xamarin Forms
Ottimizzare le dimensioni di un'applicazione .NET Core tramite il trimming
Blazor: from 0 to SPA
Produttività con C# 9
I più letti di oggi
- Specificare un constraint per TypeParam di un componente Blazor generico
- Creare un record in C#
- Learn&Get 'Applicazioni del mondo reale con ASP.NET 2.0' - Milano
- Codemotion 2012 - Roma
- Windows 10 Universal Platform Live - Online
- .NET Conference Italia - Milano
- Blazor Conference 2020 Live - Online
- Annunciata la modalità di uscita di ADO.NET Entity Framework e dei Data Services
- Disponibile la versione finale di Hyper-V: la virtualizzazione per Windows Server 2008