Fin*_*las 5 language-agnostic dependency-injection service-locator
为了解耦代码,您可以使用服务定位器,但这与全局变量/状态不一样吗?
我知道这些通常会脱离接口,因此您传入一个接口并返回一个具体的类,但我的问题仍然存在。
例如:
class Something {
void DoSomething() {
IMyType myType = ServiceLocator.GetSerivceTypeOf(IMyType);
}
}
Run Code Online (Sandbox Code Playgroud)
这里的类需要在其他地方创建的 MyType,但不是通过链向下传递 MyType(通过构造函数等...),而是以这种方式获取。
我在作为开发人员的职业生涯早期就提出了这个问题 - 在此之前我没有遇到过这种模式。安东尼已经明确了我对服务定位器的看法(因此现在是选定的答案) - 事实上,我将它们视为像其他人一样的反模式。提供的链接是一个很好的起点 - 但为了在某种程度上回答我自己的问题,它们充当全局状态,应该避免。更喜欢标准依赖注入;)
是的,它们是全局变量。虽然很复杂,但它们仍然具有相同的基本缺点。因此,依赖注入更可取。
\n\n有关构造函数注入替代方案的更详细讨论,另请参阅问题依赖注入和服务定位器模式之间的区别是什么?
\n\n\n| 归档时间: |
|
| 查看次数: |
878 次 |
| 最近记录: |