服务定位器和依赖注入容器到底什么区别?

发现yii手册中讲到的依赖注入容器和服务定位器好像 不明白为什么还搞两个出来 这两个到底什么区别? 看了半天 依赖注入容器倒是看懂了 就是不理解这个服务定位器具体什么意思 感觉和普通工厂模式不是一样么 然而laravel手册并不赞同

阅读 5.1k
2 个回答

个人理解:

1.服务定位器其实是有点类似容器的实现方式,通过把组件注册到容器中去,在使用的时候通过唯一标识或者别名拿去出来使用而已。这个只要维护好组件里面的实现,不需要去管容器的实现,使用时候注册到容器,拿出来直接使用,其实也是一个解耦的实现,更方便的维护。
2.依赖注入也是解耦,就是让类的依赖性降低,维护成本降低,比如说你的一个数据库操作类在构造函数内实例化数据库类,如果依赖注入的实现,那就是 __construct(Database $database)注入对象,避免在内部实例化,降低维护成本。

依赖注入容器是容器把依赖注入到你的类,你的类是不依赖容器的。

服务定位器是你的类直接拿了一个容器实例,然后自己从容器里取依赖的对象,你的类也就依赖了容器。

服务定位器通常是个反模式,因为类/方法的接口隐藏了实际的依赖。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题