MVVM Light - 简单的IoC + CommonServiceLocator?试图了解目的

时间:2012-04-06 11:06:51

标签: .net mvvm inversion-of-control ioc-container

所以我知道CommonServiceLocator是一个允许你切换出不同IoC容器的中间环节,但是看一下MVVM Light的示例代码,特别是ViewModelLocator,从某种意义上说它似乎很有意思

您将SimpleIoC注册为默认定位器,但同时在SimpleIoc默认实例上调用Register。

因此,如果您将来要撕掉SimpleIoC,这是不是意味着您需要更新所有注册电话?

另一个问题是,过去曾使用Castle Windsor,并且通过.config文件配置它们来支持加载类型,它在Windows 8场景中如何工作?

我还在尝试找到现在使用IoC的场景吗?

1 个答案:

答案 0 :(得分:5)

Common Service Locator实现保证您不需要替换getter调用(GetInstance,GetAllInstances等),但它们停在那里。注册是使IOC容器独一无二的原因;例如,正如您所提到的,一些支持配置配置文件(SimpleIoc没有)。所以,是的,当您将SimpleIoc替换为您选择的另一个IOC容器时,通常会替换注册部件。请注意,它通常是正常的,因为这些调用通常分组在一个公共位置,因此它们很容易替换。

有关详情,请查看http://commonservicelocator.codeplex.com/页面。

请注意,我将SimpleIoc添加到MVVM Light的目标不是提供功能强大的IOC容器。事实上,我向现有的(温莎城堡,StructureMap,Unity等)倾斜。相反,我想提供一个简单的实现,它将吸引IOC容器世界中没有经验的用户。我们的想法是,当他们需要更多高级功能时,他们将转向另一个更复杂的实现。

希望这是有道理的! 劳伦