2

MVVM Light の SimpleIoC の背後にあるものだけを知る必要がありますか? 既存のもの (Unity、Castle Windsor、StructureMap、MEF、おそらく Simple Injector ...) の 1 つですか? それとも、MVVM Light の開発チームによって実装された単純なものですか?

そのSimpleIoCを特定のIoCで動作させる方法はありますか? または、Service Locatorを使用する必要がありますか?

ありがとう

4

1 に答える 1

4

この質問に誰も答えないので、調べてみました。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 インターフェイスを実装しています...

于 2013-01-22T19:02:41.707 に答える