2009-01-18 5 views
10

ich eine Klasse des Typs haben ISimpleCache<IBrokeredDataObject>, die ich als eine Art Alias ​​hinzufügen möchten (dann eine Art) in der Datei App.configEinschließlich einer generischen Klasse in Unity App.Config Datei

die Linie

<typeAlias alias="ISimpleCacheOfIBrokeredDataObject" type="MyApplication.ISimpleCache<IBrokeredDataObject>, MyApplication" /> 

offensichtlich falsch ist aufgrund der <>, aber nicht überzeugt, ich bin entkommen ihnen;

ist entweder korrekt.

Ich zerreißt meinen derzeitigen Code auseinandere Einheit zu verwenden, so bin zu weit von einer übersetzbar Code-Basis dies schnell zu testen, und hoffte, dass hier eine Bestätigung zu erhalten.

Antwort

21

Check out this Blog-Post:

Um einen generischen Typ zu schreiben, verwenden Sie die `` `durch die Anzahl der generischen Typen gefolgt Zeichen, dass die Schnittstelle/Klasse erhält.

und ein Kommentar in der gleichen Seite sagte:

Um eine konstante Art in den generisch Sie Klammern verwenden müssen, verwenden ([[ ]]).

Also ich denke, der Konfigurationsdatei so etwas wie diese enthalten:

<typeAlias alias="ISimpleCacheOfIBrokeredDataObject" 
    type="MyApplication.ISimpleCache`1[[MyApplication.IBrokeredDataObject, MyApplication]], MyApplication" /> 

Beachten Sie die Verwendung des "Gravis" oder "Backquote" -Zeichen (`` ), not the normal single quote ( ‚`).

+3

Es lohnt Zugabe dass es "NICHT" sein muss (subtiler aber wichtiger Unterschied) – tjrobinson

+0

@tjrobinson Fertig. Vielen Dank. –

1

Und dies ist stark Typ als generische Parameter unterzeichnet.

<typeAlias alias="IPublisherOfXElement" type="MyLib.IX.IPublisher`1[[System.Xml.Linq.XElement, System.Xml.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], MyLib.IX" /> 
2

Und das ist, wie man eine Art verwenden, die zwei generische Typen erhält:

<section name="doubleFamilyConfig" 
     type="ConfigTest.Configuration.FamilySection`2[ 
       [ConfigTest.Types.Child, ConfigTest], 
       [ConfigTest.Types.Parent, ConfigTest] 
       ], 
       ConfigTest" /> 

Sie jede Art auf einer anderen Leitung verwenden können, wenn Sie möchten, so dass es leichter zu verstehen ist. Beachten Sie, dass die erste Klammer direkt hinter dem Typ sein muss (FamilySection`2 ** [**).

13

ich eher auf die Antwort kommentiert oben hätte, aber meine Punktzahl nicht hoch genug ist.

Die Syntax für die Type.GetType-Methode (String) hier dokumentiert: http://msdn.microsoft.com/en-us/library/w3f99sx1.aspx

Es gibt eine Reihe von Beispielen, von denen einige ich unten eingefügt.

ein generischer Typ mit einem Typ Argument

Type.GetType("MyGenericType`1[MyType]") 

ein generischer Typ mit zwei Typargumente

Type.GetType("MyGenericType`2[MyType,AnotherType]") 

ein generischer Typ mit zwei Assembly qualifizierten Typargumente

Type.GetType("MyGenericType`2[[MyType,MyAssembly],[AnotherType,AnotherAssembly]]") 

Eine Assembly qualifizierten generischer Typ mit einem Assembly qualifizierten Typargument

Type.GetType("MyGenericType`1[[MyType,MyAssembly]],MyGenericTypeAssembly") 

Ein generischer Typ, dessen Typargument ist ein generischer Typ mit zwei Typargumente

Type.GetType("MyGenericType`1[AnotherGenericType`2[MyType,AnotherType]]") 
+0

Wie können Sie den Typ und den Montagewert am besten ermitteln? Ich versuche, einige wirklich einfache Dinge wie Int oder Guid zu laden und werde wirklich frustriert, weil Unity nichts davon mag und die Ausnahmemeldungen nur leicht hilfreich sind. Zum Beispiel funktioniert das nicht: