2009-01-07 5 views
1

J'utilise le conteneur Castle Windosr. Je veux être en mesure de spécifier certaines dépendances de constructeurs lors de l'exécution, ce que vous pouvez évidemment faire en utilisant une surcharge Resolve qui prend un dictionnaire, tout va bien et bien. Cependant, si je veux spécifier la dépendance d'exécution pour une dépendance de la racine, alors je suis perdu, au moment où j'ai travaillé en créant explicitement chacun et literie dedans. Essentiellement c'est un scénario de décorateur et je veux obtenir une instance de le décarateur tout en fournissant une dépendance à l'exécution pour l'objet sous décoration. Des idées? Je préférerais ne pas avoir à faire ce que je fais ci-dessous et je préférerais que le constructeur du décartreur ne remplisse pas l'objet en dessous car il y aura des moments où les dépendances ne sont pas les mêmes.Castle Windsor - Dépendances d'exécution imbriquées

public static IActivity GetActivityFromIoC(string key, Message message, Audit audit) 
     { 

      IActivity activity = IoC.Resolve<IActivity>(key, new Dictionary< 
                       string, object>(){ 
       { "message", message } 
       }); 

      IActivity auditingActivity = IoC.Resolve<IActivity>("auditing.activity", new Dictionary< 
                       string, object>(){ 
      { "activity", activity },  
      { "message", message }, 
      { "audit", audit } 

       }); 

      return auditingActivity; 

     } 

Répondre

1

Vous pourriez probablement gérer cela en écrivant votre propre implémentation ISubDependencyResolver qui le faire pour vous. Le conteneur seul ne le permet pas, et très probablement il ne le sera jamais. Pourquoi? La réponse courte est - en faisant cela, vous faites des hypothèses sur les dépendances de dépendances de votre composant, ce qui est un non-non et le conteneur est tout sur la suppression de ce type de connaissances de l'appelant.

+0

J'ai joué ce rôle au travail afin que je puisse y répondre à la maison, mais tu m'as battu :) –

Questions connexes