Come forse saprete se avete seguito qualche presentazione al recente Mix09, in SIlverlight3 è stata introdotta una nuova interfaccia IApplicationService che permette la creazione di servizi da far partire allo startup e da stoppare quando l’applicazione sta per terminare, ad esempio perchè l’utente sta navigando verso un altro sito.
Per completezza segnalo anche l’interfaccia IApplicationLifeTimeAware che permette l’esecuzione di codice durante altri eventi relativi al ciclo di vita dell’applicazione come Starting,Started,Exiting,Exited…

L’uso è molto semplice, c’è però un piccolo bug (ma va? smile_regular) percui è necessario associare un x:Name al servizio quando lo si definisce nel file App.Xaml altrimenti non funziona, visto che in presenza di collezioni abbiamo sempre usato x:Key e nel codice stesso viene indicato come Key, presumo che nella versione finale verrà cambiato e mi auguro che il compilatore segnali la mancanza di tale dettaglio visto che al momento non si lamenta se vi dimenticate l’attributo.

Ecco un esempio d’uso:

public class MyAppService:IApplicationService, IApplicationLifetimeAware
{
    public void StartService(ApplicationServiceContext context)
    {
        Debug.WriteLine("StartService");
    }
 
    public void StopService()
    {
        Debug.WriteLine("StopService");
    } 
}

<Application xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
                 xmlns:local="clr-namespace:TestApplicationService"
             x:Class="TestApplicationService.App"
             >
    <Application.Services>
        <local:MyAppService x:Name="mas" />
    </Application.Services>
    <Application.Resources>
    </Application.Resources>
</Application>