免责声明:我知道 DI 和服务定位器模式之间存在争议。我有一个旨在避免辩论的问题。这个问题是针对服务定位器爱好者的,他们碰巧像 Fowler 一样思考“DI……很难理解……总的来说,除非我需要,否则我宁愿避免它。” 就我的问题而言,我必须避免 DI(故意没有给出原因),所以我不想引发与我的问题无关的辩论。
问题:将 IOC 容器保持在单例中(请记住我上面的免责声明)我可能会看到的唯一问题是使用子容器。大概子容器本身不会是单例的。起初我认为这是一个真正的问题。但是一想起来,我开始认为这正是我想要的行为(子容器不是单例,可以随意 Disposed())。
然后我的思想进一步进入了哲学领域。因为我是服务定位器的粉丝,所以我想知道子容器的概念首先有多么必要。在我看到有用性的一小部分情况下,要么是满足 DI(无论如何我都在避免),要么问题是可以在不求助于 IOC 容器的情况下解决的。我的想法部分受到了IServiceLocator 接口的启发,该接口甚至都懒得列出“GetChildContainer”方法。
所以我的问题是:如果您是服务定位器的粉丝,您是否发现子容器通常没有实际意义?否则,它们什么时候是必不可少的?
额外的功劳:如果单例中的服务定位器存在其他哲学问题(除了 DI 倡导者提出的问题),它们是什么?