我正在使用Unity for IoC,我想遵循How not to do dependency injection中规定的原则。因此,没有全局可用的容器,整个代码中没有mContainer.Resolve<Type>()
,而是构造函数注入。
我的问题是将这些原则应用于多个容器。我的应用程序比较了许多产品(遵循共享模型的对象),每个产品都由它自己的容器配置。
我正在寻找一种方法来使每个'产品'(可以被视为具有许多孩子的对象)使用它自己的容器而不指定该容器。这些容器可能是子容器或命名容器,我认为这没有任何区别?
我已经研究了统一扩展,但还没有找到答案。
答案 0 :(得分:0)
当我写这个问题时,在现有代码库中引入依赖注入时,我有点迷失在细节中。问题写得不太好,当时我意识到这一点,但我不知道如何改进我对这个问题的解释。
话虽如此,这就是我解决问题的方法。
正如我所说,我有一个比较多个产品的应用程序。这些产品可以被认为是同一接口的多个实现。所以我需要同时使用这些多个实现。所有这些产品实际上都是复杂的对象,具有多个依赖关系,其中许多对象是使用运行时数据构造的,因此不是由构造注入创建的。
我的问题是那些不是由构造函数注入创建的对象。当他们需要构建时,我已经失去了当前产品的背景,并且无法为该产品创建适当的类型。
我为每个产品创建了子容器,以定义每个产品的特定接口需要哪些实现。
在某些时候,我正在创建一个产品实例。这是代码中我唯一需要适当容器的地方(例如:给我产品X的子容器)。我需要做的就是(在产品创建时),创建一个工厂对象(具有对相应容器的引用),并将其传递给需要动态解析组件的每个对象,即不通过构造函数注入。 / p>
那是缺失的环节。我仍然想知道工厂是否真的需要知道容器,但我可以忍受。
我希望这有助于某人。