我有一个应用程序,它在启动时知道足以选择数据库并提取配置对象。
然后它在那个配置对象上执行,处理一堆东西,拉另一个配置对象,在那个配置对象上执行,等等,在一个循环中。
现在,我在应用程序的开头有一个配置根,可以配置它可以配置的所有内容。但是由于它在 db 调用之后才知道所有内容,因此该点之后的所有对象分支都隐藏在工厂工厂的后面,因此它们可以处理配置对象中发生的任何配置。
我的问题是,这正常吗?似乎另一种选择是拥有两个配置根或两个 DI 容器。一个在 db 调用之前,一个在 db 调用之后。
如果我可以在 db 调用之后执行我的 DI root,我就可以将东西直接连接到那里的容器中,从而从我的代码中删除大量工厂,这些工厂只存在,因为在应用程序启动时,我不是确定需要什么。但这似乎很奇怪。这也意味着我必须在每次迭代时重新创建我的容器或第二个容器,这看起来很奇怪。
编辑:我刚刚发现 StructureMap 对于几乎这个确切的用例有一个嵌套容器功能,所以我肯定在这里:http ://structuremap.github.io/the-container/nested-containers/
编辑:我没有得到任何回复,但无论如何后来都能回答这个问题。在下面添加了我的答案。