2009-06-04 13 views
0

Angenommen, ich habe zwei Typen, TypeA und TypeB, die ich bei Unity registrieren möchte. TypeB hängt von TypeA ab, also möchte ich TypA über die Konstruktorinjektion in Typ B einfügen. So würde Ich mag so etwas wie die folgenden schreiben und Unity intelligent genug sein, um die Auflösung für mich kaskadieren:Kaskadierende Auflösung in Unity

_container.RegisterType<ITypeA, TypeA>(); 
_container.RegisterType<ITypeB, TypeB>(); 

Wie kann ich sagen, Unity TypeA zu lösen und in TypeB zu injizieren?

Es sieht aus wie das möglich ist, wenn eine Konfigurationsdatei, aber ich weiß nicht, wie Sie es programmaticaly tun würde:

für alle Vorschläge
<type name="typeB" type="ITypeB" mapTo="TypeB"> 
    <lifetime type="Singleton"/> 
    <typeConfig extensionType="..."> 
     <constructor> 
     <param name="typeA" parameterType="ITypeA"> 
      <dependency/> 
     </param> 
     </constructor> 
    </typeConfig> 
</type> 

Vielen Dank im Voraus!


EDIT: Also, Einheit behandelt das für mich. Aber ich denke, mein Problem ist, dass ich eine Klasse mit zwei Konstruktoren:

public TypeB(TypeA typeA) 
{ 
    _x = typeA; 
} 

public TypeB() : this(Something.Value) 
{ 
} 

Es scheint, dass Unity Schwierigkeiten hat, zu wissen, welche Konstruktor zu verwenden. Der erste Konstruktor dient zum Komponententest und der zweite zur Laufzeit. Die Einheit hat damit Probleme.

Antwort

1

Sie tun es wie folgt aus:

class TypeA 
{ 
} 

class TypeB 
{ 

    [InjectionConstructor] 
    public TypeB([Dependency] TypeA typeOfA) 
    { 

    } 
} 
Verwandte Themen