【问题标题】:What is behind MVVM Light's SimpleIoCMVVM Light 的 SimpleIoC 背后是什么
【发布时间】:2013-01-02 16:58:42
【问题描述】:
我只需要知道 MVVM Light 的 SimpleIoC 背后是什么?是现有的之一(Unity、Castle Windsor、StructureMap、MEF,也许是 Simple Injector ...)?或者是简单的MVVM Light开发团队实现的?
有没有办法让 SimpleIoC 与特定的 IoC 一起工作?还是应该使用Service Locator?
谢谢
【问题讨论】:
标签:
.net
mvvm
ioc-container
【解决方案1】:
由于没有人回答这个问题,我做了一个研究。我迫不及待想知道 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 接口...
【讨论】:
-
有一篇文章更详细地展示了这是如何完成的here。但是 IServiceLocator 接口有点狭窄。我认为你必须走出它才能获得团结的全部力量