要实现控制反转,可以使用服务定位器或依赖注入器。服务定位器可能比DI更难或更长。 我认为服务定位器就像Factory模式的另一个名称,对吧?而且我不知道何时必须使用SL代替DI?你有任何实际案例可以适用吗?
答案 0 :(得分:1)
作为默认位置,请避免使用ServiceLocators。请参阅Mark Seemann关于此主题的excellent blog post。
依赖注入更容易维护,并且根本不需要“注入器”或DI框架。它只是一个问题,或者提供一个具有它依赖关系的对象(最好是在构造函数中),而不是让对象自己收集它们。我非常严格地遵守DI,我几乎从不使用DI框架。
答案 1 :(得分:0)
我认为SL和Factory模式之间存在细微差别。
通常,工厂模式将创建服务的新实例,调用者将成为实例的所有者。
另一方面,服务定位器将提供预先存在的服务实例。调用者不会成为此实例的“所有者”。此类预先存在的实例通常在所有客户端之间共享。 大多数情况下,实例化预先存在的实例的责任留给某些第三方代码。