是否可以将服务定位器用于普遍使用的依赖项?

时间:2015-11-26 17:46:52

标签: unit-testing testing dependency-injection service-locator

我们严格遵守代码库中的控制反转,但这会造成地狱般的构造者(是的,我知道这意味着我们的课程不够紧密,这是一项正在进行的工作)。
问题是,有时这些依赖项非常愚蠢,就像启用日期模拟的DateTime包装器,或者与类的业务没有直接关系的记录器或TaskFactory包装器,我认为它们不需要明确的介绍。 / p>

我们可以通过为整个系统传递的项目使用服务定位器来减轻我们的ctors的负担吗?会有什么缺点?

1 个答案:

答案 0 :(得分:4)

  

我们可以通过使用服务定位器来处理那些通过整个系统传递的项目来减轻我们的ctors的负担吗?

不,依赖关系仍然存在,但它不是明确的,而是现在隐含的。

只要你有too many constructors arguments, at least you know that you have a problem。如果您介绍服务定位器,您仍然遇到所有原始问题,但现在您还violated encapsulation。你只是让潜在的问题更难以发现,而没有解决任何问题。

Service Locator is a bona fide anti-pattern;它什么都解决不了。