最近,我一直试图理解使用服务定位器“反模式”和使用Castle Windsor容器之间的区别。我在互联网上找到了一些信息,并在一篇未完成的博客文章中总结了我迄今为止学到的东西。
修改:到目前为止,我一直认为依赖注入是确保分离的唯一需要的东西。但无论我看哪里,都会推向像Castle Windsor这样的容器。我想清楚地理解原因。 请…给我讲得简单明白一点 :)
最近,我一直试图理解使用服务定位器“反模式”和使用Castle Windsor容器之间的区别。我在互联网上找到了一些信息,并在一篇未完成的博客文章中总结了我迄今为止学到的东西。
修改:到目前为止,我一直认为依赖注入是确保分离的唯一需要的东西。但无论我看哪里,都会推向像Castle Windsor这样的容器。我想清楚地理解原因。 请…给我讲得简单明白一点 :)
一个服务定位器可能只是某个控制反转容器(例如Castle Windsor)的包装器。关键在于你的代码(理想情况下)应该只在你的组合根处引用容器。
因为控制反转容器支持依赖链,当你从容器中解析出根类型时,所有它的依赖项以及任何后代依赖项都将被注入。
如果你希望在运行时创建更多类型,则可以使用工厂,这些工厂也可以引用你的容器,如果你希望利用容器和接口的映射来获取依赖链的优势。