2010-07-06 66 views
1

我试图重构我的代码以使用Common Service Locator。我有一个其他组件使用的共享库。ServiceLocator的消费者是否应该调用ServiceLocator.Current?

我不明白的是:这些组件是否应该调用ServiceLocator.Current并解决它们的类型?在这种情况下,我怎样才能确保ServiceLocator.Current实际设置?我应该创建自己的“MyServiceLocator”并添加一个静态构造函数吗? (这似乎打败了具有标准化抽象的目的)

或者我的共享库有一个类,公开属性公开属性,从而保持ServiceLocator完全内部的共享库吗? (这意味着在抽象的抽象之上抽象)?

问题是组件不是通过DI创建的,而是应该调用容器来获取他们需要的任何东西。

+1

烧SL,烧!! – 2010-07-07 08:34:14

回答

3

shouldn't be using a Service Locator at all。相反,通过允许您(或任何DI容器)向其中注入适当的依赖关系,确保所有依赖关系的使用者都可以使用可扩展性构造函数注入通常是最好的选择。

Krzysztof Kozmic最近发布了how a DI Container should be used的好概述。他的例子使用Castle Windsor,但您可以推断任何DI Container以及Common Service Locator。但是,如果遵循这些原则,公共服务定位器变为冗余