Я новичок в блоке приложений 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;
}
}





Самое простое решение, которое я вижу, - предоставить конструктору ChildContainer родительский контейнер и вызвать метод CreateChildContainer () внутри ctor:
public class ChildContainer2 : IChildContainer
{
private IUnityContainer _container;
public ChildContainer(IUnityContainer parent)
{
_container = parent.CreateChildContainer();
}
public IUnityContainer Container { get { return _container; } }
}
Но почему вы хотите сделать дочерний контейнер службой? Не было бы лучше, если бы каждый компонент в вашем приложении сам создавал дочерний контейнер, если он ему нужен?
Я предполагаю, что вы предполагаете следующее .. public RootContainer () {_container = new UnityContainer (); _container.RegisterInstance <IUnityContainer> (_container); _container.RegisterType <IChildContainer, ChildContainer> (); }