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
Avviare rapidamente un container con Azure Container Apps Express
Supporto nativo a JSON in SQL Server 2025
Creare una cache temporanea in JavaScript
Impostare la content-visibility in CSS per ottimizare il rendering iniziale di una pagina
Evitare il cache poisoning nei workflow di GitHub
Creare un indice su una colonna JSON in SQL Server
Sfruttare le regular expression in SQL Server 2025: la funzione REGEXP_LIKE
Permettere a un LLM di invocare funzioni con Microsoft.Extensions.AI
Utilizzare zizmor per rendere più sicuri i workflow di GitHub
Usare Microsoft-Decision-1 di AI Foundry per ottenere risposte decisionali strutturate
Ottimizzare gli indici con Automatic Index Compaction in Azure SQL Database
Validare i dati di una colonna JSON in SQL Server


