web-dev-qa-db-fra.com

comment utiliser MVVMLight SimpleIoc?

Je réorganise mon logiciel qui contient des bits Messenger.Default(...) désordonnés.

Existe-t-il une feuille de triche pour connaître l'utilisation de MVVMLight SimpleIoc (pas la description générale de l'IoC)?

54
Youngjae

Feuille de berceau SimpleIoc:

1) Vous enregistrez toutes vos interfaces et objets dans ViewModelLocator

class ViewModelLocator 
{ 
    static ViewModelLocator() 
    {         
        ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);          
        if (ViewModelBase.IsInDesignModeStatic) 
        {              
            SimpleIoc.Default.Register<IDataService, Design.DesignDataService>();          
        }          
        else         
        {              
            SimpleIoc.Default.Register<IDataService, DataService>();          
        }          
        SimpleIoc.Default.Register<MainViewModel>();                  
        SimpleIoc.Default.Register<SecondViewModel>(); 
    }      


    public MainViewModel Main 
    {  
        get  
        {      
            return ServiceLocator.Current.GetInstance<MainViewModel>();  
        } 
    }
} 

2) Chaque objet est un singleton par défaut. Pour résoudre un objet afin qu'il ne soit pas un singleton, vous devez passer une valeur unique à l'appel GetInstance:

SimpleIoc.Default.GetInstance<MainViewModel>(Guid.NewGuid().ToString());

3) Pour enregistrer une classe sur une interface:

SimpleIoc.Default.Register<IDataService, Design.DesignDataService>();  

4) Pour enregistrer un objet concret contre une interface:

SimpleIoc.Default.Register<IDataService>(myObject);     

5) Pour enregistrer un type concret:

SimpleIoc.Default.Register<MainViewModel>();   

6) Pour résoudre un objet à partir d'une interface:

SimpleIoc.Default.GetInstance<IDataService>();

7) Pour résoudre un objet directement (fait l'accumulation et la résolution des dépendances):

SimpleIoc.Default.GetInstance<MainViewModel>();

8) MVVM facilite la création de données au moment de la conception:

if (ViewModelBase.IsInDesignModeStatic) 
{              
    SimpleIoc.Default.Register<IDataService, Design.DesignDataService>();          
}          
else         
{              
    SimpleIoc.Default.Register<IDataService, DataService>();          
}  

Si vous êtes en mode conception, il enregistrera automatiquement vos services au moment de la conception, ce qui rendra très facile d'avoir des données dans vos modèles et vues lorsque vous travaillez dans le concepteur VS.

J'espère que cela t'aides.

134
Faster Solutions