最近我一直在阅读IoC、DI和服务定位器方面的内容,但是我有一个问题。有时候DI使用容器来调用依赖关系,对吗?但这个容器不是一个服务定位器吗?
我看不出两者之间的区别。
最近我一直在阅读IoC、DI和服务定位器方面的内容,但是我有一个问题。有时候DI使用容器来调用依赖关系,对吗?但这个容器不是一个服务定位器吗?
我看不出两者之间的区别。
因此,只要您在那个唯一的位置使用容器,它就不是服务定位器。组合根是应用程序中(最好是)唯一的位置,其中模块被组合在一起。
Container(容器)可以注册您的依赖项并解决它们。而定位器(Locator)则使用容器来解决服务。
要使用容器,您必须引用它。另一方面,定位器通常是静态可用的,您不需要引用它。
定位器被认为是反模式,因为它允许您“就地”解决任何依赖关系,这实际上使依赖关系变得隐式。这意味着类客户端直到运行时才会意识到依赖关系。