0

これは、MVVMLightのデフォルトテンプレート(ViewModelLocator.cs)のコードセグメントです。私は簡単にするためにいくつかの部分を削除しました。MVVMLightでSimpleIoCを使用する利点は何ですか?

public class ViewModelLocator 
{ 
    static ViewModelLocator() 
    { 
     ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default); 

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

     SimpleIoc.Default.Register<MainViewModel>(); 
    } 

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

は今、これはSimpleIoCを使用せずに、それを自分自身のバージョンであり、それは(少なくとも私自身の観察で)最初のバージョンとして同じを進めています。私の意見で

public class ViewModelLocator 
{ 
    static ViewModelLocator() { } 

    public MainViewModel Main 
    { 
     get 
     { 
      if(ViewModelBase.IsInDesignModeStatic) 
       return new MainViewModel(new DesignDataService()); 
      else 
       return new MainViewModel(new DataService()); 
     } 
    } 
} 

は、第二のバージョンはを理解しやすいと明らかに短いです。もちろん、最初の例では、MainViewModelのインスタンスが1つしか作成されていません(シングルトンパターンと呼ばれていますか?)が、SimpleIoCクラスを使用せずに達成できると思います。私の質問は、SimpleIocクラスを使用してクラス/オブジェクトを「登録」する利点は何ですか?それを私に説明してください。

+0

5th SOLID priciple。 – Karolis

+0

@KarolisKajėnasあなたのポイントは何か分かりません。どちらの例も依存性注入を示しており、質問にそのようにタグ付けされています。 –

+0

@KarolisKajėnas:私はそれについて読むでしょう。私がその原則について聞いたのは初めてのことです。 – someone

答えて

1

どちらも依存性注入の例ですが、どちらもコンテナを使用し、1つは明示的です。 「Poor Man's DI」または「Pure DI」と呼ばれることもあります。

私はおそらく、この簡単な例では明示的な方法がそれほど複雑でなく、おそらく私が選んだものであることに同意します。

有用なDIコンテナをいつ使用するかについては、Mark Seeman's blog postがあります。

関連する問題