我只需要知道MVVM Light的SimpleIoC背后是什么?是现有的(Unity,Castle Windsor,StructureMap,MEF,也许是Simple Injector ......)?或者它是由MVVM Light的开发团队实现的简单的一个?
有没有办法使SimpleIoC能够与特定的IoC一起使用?或者我应该使用Service Locator?
由于
答案 0 :(得分:4)
由于没有人回答这个问题,我做了一个研究。我迫不及待想知道SimpleIoC的背后是什么,这个问题Laurent可能会回答它。
但是第二个(有没有办法让SimpleIoC与特定的IoC一起工作?或者我应该使用服务定位器?)我现在可以回答它。
问题是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接口...