2008-12-10 6 views
2

Je suis un nouveau venu dans le bloc d'application Unity et je suis un peu coincé en essayant d'implémenter ce qui suit. J'ai un conteneur parent et enfant. Lorsque je résous une nouvelle instance du conteneur enfant, je veux injecter un nouveau UnityContainer dans le constructeur en utilisant la méthode CreateChildContainer.UnityContainer, injection de conteneur enfant

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; 
    } 
} 

Répondre

0

La solution la plus simple que je vois est de donner le constructeur du ChildContainer conteneur parent et appeler la méthode CreateChildContainer() dans le cteur:

public class ChildContainer2 : IChildContainer 
{ 
    private IUnityContainer _container; 

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

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

Mais pourquoi voulez-vous faire le conteneur enfant une un service? Ne serait-il pas préférable que chaque composant de votre application crée un conteneur enfant par lui-même s'il en a besoin?

+0

Je suppose que vous assumez les éléments suivants .. RootContainer publique() { de _container = new UnityContainer(); _container.RegisterInstance (_ conteneur); _container.RegisterType (); } –