これは、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
クラスを使用してのクラス/オブジェクトを「登録」する利点は何ですか?それを私に説明してください。
5th SOLID priciple。 – Karolis
@KarolisKajėnasあなたのポイントは何か分かりません。どちらの例も依存性注入を示しており、質問にそのようにタグ付けされています。 –
@KarolisKajėnas:私はそれについて読むでしょう。私がその原則について聞いたのは初めてのことです。 – someone