因此,我知道CommonServiceLocator是一个中间关系,用于允许您切换出不同的IoC容器,但是查看MVVM Light的示例代码(尤其是ViewModelLocator),在某种意义上似乎很有趣

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

因此,如果将来要删除SimpleIoC,这是否意味着您需要更新所有注册调用?

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

我仍在尝试找到该场景的使用IoC的意义所在?

最佳答案

Common Service Locator实现保证您不需要替换getter调用(GetInstance,GetAllInstances等),但是它们在那里停止了。注册是使IOC容器与众不同的原因。例如,正如您提到的,某些支持使用配置文件进行配置(而SimpleIoc则不支持)。所以是的,当用您选择的另一个IOC容器替换SimpleIoc时,通常将替换注册部分。请注意,这通常是可以的,因为这些调用通常在同一位置进行分组,因此很容易替换。

有关更多信息,请检查http://commonservicelocator.codeplex.com/页面。

请注意,我将SimpleIoc添加到MVVM Light的目标不是提供功能强大的IOC容器。实际上,我屈服于现有的(CaSTLe Windsor,StructureMap,Unity等)。相反,我想提供一种简单的实现方式,以吸引IOC容器领域中没有经验的用户。这个想法是,当他们需要更多高级功能时,它们将转向另一个更复杂的实现。

希望这有道理!
劳伦特

关于.net - MVVM Light-简单的IoC + CommonServiceLocator吗?试图了解目的,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10042628/

10-13 06:21