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