2015-07-14 1 views
1

J'ai une interface de service simple que j'utilise pour synchroniser les données avec un serveur via HTTP. L'interface de service a une méthode pour démarrer et arrêter le processus de synchronisation. L'idée est de démarrer le processus de synchronisation après que l'utilisateur se connecte et d'arrêter la synchronisation à la fin de l'application avant que l'utilisateur ne se déconnecte. Le service de synchronisation vérifiera les nouveaux messages toutes les quelques minutes, puis notifiera le (s) ViewModel (s) des données nouvelles/modifiées en utilisant le plugin MvxMessenger.Maintenir un service actif pendant toute la durée de vie de l'application

Quelle est la méthode recommandée pour assurer la durée de vie du service de synchronisation pour la durée de l'application? J'utilise actuellement un IMvxAppStart personnalisé qui enregistre l'interface de service en tant que singleton, puis contient une référence statique à l'interface de service. Est-ce suffisant pour maintenir le service en vie pendant la durée de vie de l'application, ou existe-t-il un meilleur moyen?

public class App : MvxApplication 
{ 
    public override void Initialize() 
    { 
     ... 
     RegisterAppStart(new CustomAppStart()); 
    } 
} 

public class CustomAppStart : MvxNavigatingObject, IMvxAppStart 
{ 
    public static ISyncClient SynchronizationClient { get; set; } 

    public void Start(object hint = null) 
    { 
     SynchronizationClient = Mvx.Resolve<ISyncClient>(); 
     ShowViewModel<SignInViewModel>(); 
    } 
} 

public interface ISyncClient 
{ 
    void StartSync(); 
    void StopSync(); 

    bool IsSyncActive { get; } 
} 

Répondre

1

Vous n'avez pas besoin d'une propriété statique pour cela. Lorsque vous enregistrez l'interface en tant que singleton, l'IoC fait le travail pour vous. Exemple: Dans l'une de nos applications, nous avons besoin d'une propriété d'état avec des données importantes pour toute la durée de vie de l'application.

Les modèles qui ont besoin de cet état, juste utilisations suivantes: extrait de code

protected IApplicationState AppState 
{ 
    get { return _appstate ?? (_appstate = Mvx.GetSingleton<IApplicationState>()); } 
} 
private IApplicationState _appstate; 

Mais: Vous pouvez le faire aussi avec une propriété statique. Mais dans ce cas, vous n'avez pas besoin d'une valeur singleton dans l'IoC.