【发布时间】:2012-04-23 05:54:30
【问题描述】:
我有一个ObjectA,它有一个ObjectB 的属性,它有一个ObjectC 的属性,它们都在Simple Injector 容器中。当我创建ObjectA 时,我在其上调用InjectProperties,它会加载ObjectB。但是,此时它并没有在新创建的ObjectB 中加载对ObjectC 的引用;它不会执行我所说的对象“深度堆积”。
有没有办法启用它?
编辑
我有一个类对象 A:
public class ObjectA
{
public ObjectB InstanceB { get; set; }
}
其中有ObjectB的属性:
public class ObjectB
{
public ObjectC InstanceC { get; set; }
}
所有都已使用容器上的标准注册方法注册。为了获得ObjectA,我使用GetInstance<ObjectA>(),,这很好,我还构建了一个初始化器来在创建时构建所有对象:
_container.RegisterInitializer<object>(i => _container.InjectProperties(i));
这会将ObjectB 注入ObjectA,但不会在解析ObjectB 时将ObjectC 注入ObjectB。
有解决方法吗?谢谢。
【问题讨论】:
-
Simple Injector 系统应该开箱即用地构建您的整个树,您能否发布示例代码,包括容器注册。您可能需要考虑使用构造函数注入,而不是在构造后显式注入属性。如果您无法更改此模式,您可能需要考虑使用不同的 IoC 容器,例如 Unity。这绝对支持后期构建深度构建
-
请出示这些课程的代码和注册。我同意罗伯特所说的大多数人的观点,除了切换到 Unity(尤其是 Unity)。
标签: .net dependency-injection ioc-container simple-injector