Dependency injection Unity 2.0:如何在容器上创建子容器?

Dependency injection Unity 2.0:如何在容器上创建子容器?,dependency-injection,inversion-of-control,unity-container,ioc-container,Dependency Injection,Inversion Of Control,Unity Container,Ioc Container,我有一个MessageSender类,其构造函数如下所示: public MessageSender(IInputComponent input, IOutputComponent output) { m_Input = input; m_Output = output; } 我是这样实例化它的: Container.RegisterType<IMessageSender, MessageSender>();

我有一个MessageSender类,其构造函数如下所示:

    public MessageSender(IInputComponent input, IOutputComponent output)
    {
        m_Input = input;
        m_Output = output;
    }
我是这样实例化它的:

    Container.RegisterType<IMessageSender, MessageSender>();
    Container.RegisterType<IInputComponent, KeyboardInput>();
    Container.RegisterType<IOutputComponent, ScreenOutput>();
    Container.RegisterType<ILogger, Logger>();
    return Container.Resolve<IMessageSender>();
Container.RegisterType();
Container.RegisterType();
Container.RegisterType();
Container.RegisterType();
返回Container.Resolve();
这是键盘输入导体:

    public KeyboardInput(IUnityContainer container)
    {
        m_Container = container;
        m_Logger = container.Resolve<ILogger>();
    }
公用键盘输入(IUnityContainer容器)
{
m_容器=容器;
m_Logger=container.Resolve();
}
我希望KeyboardInput实例接收一个子容器到它的构造函数,这样它将从子容器而不是父容器解析它的记录器

我怎样才能做到这一点


谢谢

您不应该在KeyboardInput或任何其他类中依赖IUnityContainer。DI容器应该解析所有组件,并避免妨碍—我称之为。保留对容器的引用会导致出现错误,所以这是一个非常糟糕的想法

Krzysztof Koźmic最近的这些帖子很好地解释了这一点:


总是可以重新设计对象模型,这样就不必引用容器。您认为为什么需要键盘输入中的容器?

谢谢您的回复!我希望将IOC容器作为实例变量的主要原因是,我希望将可丢弃的服务代理实例化为方法中的局部变量,以便尽快调用Dispose()方法。这个答案可能会有所帮助: