UnityContainer, внедрение дочернего контейнера

Я новичок в блоке приложений Unity и немного застрял, пытаясь реализовать следующее. У меня есть родительский и дочерний контейнеры. Когда я разрешаю новый экземпляр дочернего контейнера, я хочу внедрить новый контейнер UnityContainer в конструктор, используя метод CreateChildContainer.

public class RootContainer
{
    private IUnityContainer _container;

    public RootContainer()
    {
        _container = new UnityContainer();
        _container.RegisterType<IChildContainer, ChildContainer>();
    }
}

public interface IChildContainer { }

public class ChildContainer : IChildContainer
{
    private IUnityContainer _container;

    /* I want to inject the parent.CreateChildContainer() into this constructor */
    public ChildContainer(IUnityContainer container)
    {
        _container = container;
    }
}

person Rohan West    schedule 10.12.2008    source источник


Ответы (1)


Самое простое решение, которое я вижу, - это дать конструктору ChildContainer родительский контейнер и вызвать метод CreateChildContainer() внутри ctor:

public class ChildContainer2 : IChildContainer
{
    private IUnityContainer _container;

    public ChildContainer(IUnityContainer parent)
    {
        _container = parent.CreateChildContainer();
    }

    public IUnityContainer Container { get { return _container; } }
}

Но почему вы хотите сделать дочерний контейнер сервисом? Не было бы лучше, если бы каждый компонент в вашем приложении сам создавал дочерний контейнер, если он ему нужен?

person Prensen    schedule 10.12.2008
comment
Я предполагаю, что вы предполагаете следующее: public RootContainer() { _container = new UnityContainer(); _container.RegisterInstance‹IUnityContainer›(_container); _container.RegisterType‹IChildContainer, ChildContainer›(); } - person Nigel Thorne; 17.04.2009