我认为这不会通过注入工作,因为您在父对象中实现了它,因为父容器在子对象实例化之前不存在。因此,您无法生成要注入的子容器。更好的方法是通过基类上的参数化构造函数注入父容器,然后将两者都注入子类。默认构造函数可以使用null调用参数化构造函数,参数化构造函数可以检测到这一点,如果未指定容器,则可以创建容器。为了清楚起见,下面的示例进行了简化。
public abstract class BaseClass
{
public IUnityContainer Container { get; protected set; }
public BaseClass() : BaseClass(null) {}
public BaseClass( IUnityContainer container )
{
this.container = container ?? this.CreateContainer();
}
public abstract IUnityContainer CreateContainer();
}
public class DerivedClass : BaseClass
{
public IUnityContainer ChildContainer { get; private set; }
public DerivedClass() : DerivedClass(null,null) {}
public DerivedClass( IUnityContainer parent, IUnityContainer child )
: BaseClass( parent )
{
this.ChildContainer = child ?? this.CreateChildContainer();
}
public IUnityContainer CreateContainer()
{
return new UnityContainer();
}
public IUnityContainer CreateChildContainer()
{
return this.Container.CreateChildContainer();
}
}