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
Creazione di componenti personalizzati in React.js con Tailwind CSS
Le novità di Angular: i miglioramenti alla CLI
Gestire il colore CSS con HWB
Code scanning e advanced security con Azure DevOps
C# 12: Cosa c'è di nuovo e interessante
Installare le Web App site extension tramite una pipeline di Azure DevOps
Come EF 8 ha ottimizzato le query che usano il metodo Contains
Utilizzare Tailwind CSS all'interno di React: primi componenti
Esportare ed analizzare le issue di GitHub con la CLI e GraphQL
Utilizzare Copilot con Azure Cosmos DB
Supportare lo HierarchyID di Sql Server in Entity Framework 8
Gestire liste di tipi semplici con Entity Framework Core
I più letti di oggi
- Migliorare la scalabilità delle Azure Function con il Flex Consumption
- Persistere la ChatHistory di Semantic Kernel in ASP.NET Core Web API per GPT
- Accesso ai dati asincrono in un controller ASP.NET MVC
- Pulsanti con immagini per colonne di editing
- Mostrare liste raggruppate con ItemsControl nelle Windows Store app
- Gestione del SEO con AttributeRouting in ASP.NET MVC