【发布时间】:2015-06-18 19:58:01
【问题描述】:
在 spring4d 演示中,ServiceLocator.GetService<MyType>('Name') 用于解析类型。但是为什么不使用GlobalContainer.Resolve<MyType>('Name')?我认为这种方法没有任何优势...
【问题讨论】:
-
Some 认为service locator 是一种反模式。我会考虑这两种方法的替代品。
-
由于两者都使用全局变量,它们并不酷,是的。但是您对替代方案有什么建议吗?
-
我认为您可以确保只使用应用程序的CompositionRoot 中的容器,然后只要对象图完全在组合根(并且容器不在此位置之外引用),则服务定位器在功能上与依赖注入相同。
-
但是有什么区别呢?当我可以拿容器时为什么要使用服务定位器?
-
我推荐使用 GlobalContainer.Resolve,完全忽略 ServiceLocator。我还建议在应用程序的组合根中进行调用。在 Delphi 中,这通常在 DPR 文件中。
标签: delphi dependency-injection ioc-container delphi-xe6 spring4d