2012-03-28 1 views
1

Wie der Titel sagt: was (wenn verfügbar) ist der Ersatz für das <typeConfig /> Element in Unity 2?Was ist der Unity 2-Ersatz für <typeConfig />?

Oder alternativ: Wie kann ich einen Typ-Parameter für eine Klasse in der Unity-Konfiguration konfigurieren?

<alias alias="ISomeInterface" type="Namespace.ISomeInterface" /> 
<alias alias="SomeType" type="Namespace.SomeType`1" /> 
<alias alias="Foo" type="Namespace.Foo" /> 
<alias alias="Bar" type="Namespace.Bar" /> 

<container> 
    <register type="ISomeInterface" mapTo="SomeType" name="GenericFoo"> 
     <!-- define generic type as Foo --> 
    </register> 
    <register type="ISomeInterface" mapTo="SomeType" name="GenericBar"> 
     <!-- define generic type as Bar --> 
    </register> 
</container> 

Antwort

2

Die < typeConfig> wurde Element einfach entfernt - es war eine Schicht von XML, die alles andere als Rauschen nicht wirklich in die Konfigurationsdatei hinzugefügt haben. Die Sachen, die Sie zuvor in typeConfig verschachtelt haben (wie < Konstruktor>, < Parameter>, usw.), werden jetzt als Kinder des Registers> < register> platziert.

<register type="ISomeInterface" mapTo="SomeType[Foo]" name="GenericFoo" /> 
<register type="ISomeInterface" mapTo="SomeType[Bar]" name="GenericBar" /> 

Oder Sie könnten die CLR generischen Typ Syntax verwenden (die Version mit:

Wie für Ihr Beispiel gibt, dann würden Sie die generischen Typ-Parameter als Teil des mapTo Parameters, wie so angeben müssen die `1 etc.), aber das ist viel lauter als die Verknüpfungssyntax, die Unity hier implementiert.

HINWEIS: Natürlich funktionieren die Aliase, die Sie oben haben, nicht, da Sie die Assemblynamen nicht mit ihnen angegeben haben. Daher funktioniert diese Lösung erst, wenn Sie diese Details ausgearbeitet haben. Ziehen Sie auch die Verwendung der Deklarationen < Assembly> und < namespace> in der Konfigurationsdatei in Betracht, um die Notwendigkeit für viele Aliasnamen zu entfernen.

+0

Danke für die Details! Ich habe die Namespace-/Assemblierungsdetails aus Gründen der Lesbarkeit weggelassen, jedoch habe ich vergessen zu erwähnen, dass "SomeType" tatsächlich zwei generische Parameter hat und dass "ISomeInterface" tatsächlich _one_ hat. Stellt die Shortcut-Syntax eine Methode zur Verfügung, um einen generischen Parameter über die Konfiguration und den anderen während der Auflösung bereitzustellen? '' – Ropstah