59

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

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

4

1 に答える 1

144

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 デザイナーで作業するときにビューモデルとビューにデータを簡単に配置できます。

お役に立てれば。

于 2012-12-10T16:32:56.117 に答える