web-dev-qa-db-ja.com

MVVMLight SimpleIocの使用方法

Messenger.Default(...)ビットが乱雑なソフトウェアを改良しています。

MVVMLight SimpleIocの使用法(一般的なIoCの説明ではありません)を知るためのチートシートはありますか?

54
Youngjae

SimpleIocベビーベッドシート:

1)すべてのインターフェイスとオブジェクトを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)デフォルトでは、すべてのオブジェクトはシングルトンです。シングルトンではないようにオブジェクトを解決するには、GetInstance呼び出しに一意の値を渡す必要があります。

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

3)インターフェイスに対してクラスを登録するには:

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

4)インターフェイスに対して具象オブジェクトを登録するには:

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

5)具象型を登録するには:

SimpleIoc.Default.Register<MainViewModel>();   

6)インターフェイスからオブジェクトを解決するには:

SimpleIoc.Default.GetInstance<IDataService>();

7)オブジェクトを直接解決するには(ビルドアップと依存関係の解決を行います):

SimpleIoc.Default.GetInstance<MainViewModel>();

8)MVVMを使用すると、設計時データを非常に簡単に作成できます。

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

デザインタイムモードの場合は、デザインタイムサービスが自動的に登録されるため、VSデザイナーで作業するときにビューモデルとビューにデータを簡単に登録できます。

お役に立てれば。

134