2

我只需要知道 MVVM Light 的 SimpleIoC 背后是什么?是现有的之一(Unity、Castle Windsor、StructureMap、MEF,也许是 Simple Injector ...)?或者它是由 MVVM Light 的开发团队实现的简单的一个?

有没有办法让 SimpleIoC 与特定的 IoC 一起工作?或者我应该使用服务定位器

谢谢

4

1 回答 1

4

由于没有人回答这个问题,我做了一个研究。我迫不及待想知道 SimpleIoC 的背后是什么,这个问题Laurent可能会回答它。

但是第二个(有没有办法让 SimpleIoC 与特定的 IoC 一起工作?或者我应该使用服务定位器吗?)我现在可以回答了。

问题是它SimpleIoc.Default是接口的一个实现IServiceLocator,并且 MVVMLight Toolkit 使用服务定位器模式工作。所以如果我们想使用任何 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 回答