MVVM Light の SimpleIoC の背後にあるものだけを知る必要がありますか? 既存のもの (Unity、Castle Windsor、StructureMap、MEF、おそらく Simple Injector ...) の 1 つですか? それとも、MVVM Light の開発チームによって実装された単純なものですか?
そのSimpleIoCを特定のIoCで動作させる方法はありますか? または、Service Locatorを使用する必要がありますか?
ありがとう
MVVM Light の SimpleIoC の背後にあるものだけを知る必要がありますか? 既存のもの (Unity、Castle Windsor、StructureMap、MEF、おそらく Simple Injector ...) の 1 つですか? それとも、MVVM Light の開発チームによって実装された単純なものですか?
そのSimpleIoCを特定のIoCで動作させる方法はありますか? または、Service Locatorを使用する必要がありますか?
ありがとう
この質問に誰も答えないので、調べてみました。SimpleIoC の背後にあるものを知るのが待ちきれません。この質問に答えてくれるかもしれないローラン。
しかし、2 つ目 (SimpleIoC を特定の IoC で動作させる方法はありますか? または、Service Locator を使用する必要がありますか?) については、今すぐ答えられます。
これSimpleIoc.Default
はインターフェイスの実装でありIServiceLocator
、MVVMLight Toolkit は Service Locator パターンを使用して動作します。したがって、IoC ライブラリを使用したい場合は、IServiceLocator
インターフェイスを実装するだけで、それを使用できます。
たとえば、Unity IoC を使用すると、次のようになります。
public ViewModelLocator()
{
var container = new UnityContainer();
//ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);
ServiceLocator.SetLocatorProvider(() => new UnityServiceLocator(container));
//If we wish use another IoC we must implement the IServiceLocator interface
////if (ViewModelBase.IsInDesignModeStatic)
////{
//// // Create design time view services and models
//// SimpleIoc.Default.Register<IDataService, DesignDataService>();
////}
////else
////{
//// // Create run time view services and models
//// SimpleIoc.Default.Register<IDataService, DataService>();
////}
container.RegisterType<MainViewModel>();
//SimpleIoc.Default.Register<MainViewModel>();
}
このコードは、ViewModelLocator のコンストラクターです。UnityServiceLocator クラスは IServiceLocator インターフェイスを実装しています...