2010-01-18 11 views
1

Dire que j'ai cette classeRésolution paramters constructeur utilisant le même nom utilisé pour résoudre l'objet

public class MyObject : IObject 
{ 
    public MyObject(IObject2 object2) 
    { 

    } 
} 

que je résoudre comme:

Container.Resolve<IObject>("SomeName"); 

Est-il possible de configurer l'unité de sorte que chaque fois qu'un IObject est résolu en utilisant n'importe quel nom, alors IObject2 sera également résolu avec le même nom (en supposant qu'il a été enregistré avec un tel nom)?

Je cherche un moyen qui n'utilise pas InjectionConstructor, car je ne veux pas le mettre à jour pour chaque nouveau nom que je présente.

Répondre

2

Cela devrait travailler:

container.RegisterType<IObject2, MyObject2>("someName"); 
// ... 
container.RegisterType<IObject, MyObject>("someName", 
    new InjectionConstructor(
     new ResolvedParameter<IObject2>("someName"))); 

Si vous souhaitez enregistrer plusieurs noms, vous pouvez toujours envisager d'emballer ce petit extrait dans une méthode réutilisable qui prend le nom comme paramètre d'entrée.

Je n'ai pas l'unité à proximité en ce moment, donc ce qui est plus ou moins de mémoire ...

+0

Je suis à la recherche d'un moyen de le faire sans spécifier InjectionConstructor. –

+0

Je ne suis pas conscient que vous pouvez facilement faire une telle chose avec Unity, mais la question est aussi de savoir si vous voulez. Peut-être pourriez-vous partager quelques détails sur votre scénario et nous verrons si nous pouvons vous aider. La bonne solution peut être quelque chose d'entièrement (je le soupçonne). –

+0

Je crée plusieurs types de IObject lors d'une seule requête sur mon application, par exemple MyObject et OtherObject. Chaque type a une hiérarchie sous-jacente d'objets à faire correspondre. Je veux que quand un type est créé basé sur le nom x, sa hiérarchie sera également créée en fonction du nom x, donc si un objet MyObject est créé son IObject2 sera de type MyObject2, et si un OtherObject est créé, son IObject2 sera de type OtherObject2. –