【发布时间】:2010-11-01 23:21:12
【问题描述】:
为了解耦代码,您可以使用服务定位器,但这与全局变量/状态不同吗?
我知道这些经常运行接口,所以你传入一个接口并返回一个具体的类,但我的问题仍然存在。
例如:
class Something {
void DoSomething() {
IMyType myType = ServiceLocator.GetSerivceTypeOf(IMyType);
}
}
这里的类需要 MyType,它是在其他地方创建的,但不是通过链(通过构造函数等)向下传递 MyType,而是以这种方式获取的。
我在我作为开发人员的职业生涯早期就问过这个问题 - 在此之前我没有遇到过这种模式。 Anthony 已经在服务定位器上确定了我的观点(因此现在是选定的答案)——事实上,我将它们视为与其他人一样的反模式。提供的链接是一个很好的起点 - 但在这么长时间之后,为了在某种程度上回答我自己的问题,它们充当全局状态,应该避免。更喜欢标准的依赖注入 ;)
【问题讨论】:
-
一两个例子可能会引起讨论。
标签: language-agnostic dependency-injection service-locator