2010-08-18 6 views
54

Ich habe eine Methode, wo ich den Typ einer Klasse auflösen muss. Diese Klasse existiert in einer anderen Baugruppe mit dem Namespace ähnelt:Typ von Klassenname in einer anderen Baugruppe auflösen

Type.GetType("MyProject.Domain.Model." + myClassName); 

Dies funktioniert gut, wenn der Code, der diese Aktion ausführt, in derselben Baugruppe ist:

MyProject.Domain.Model 

Ich versuche, die folgende auszuführen Als Klasse, deren Typ ich versuche zu lösen, schlägt dieser Code jedoch fehl, wenn sich meine Klasse in einer anderen Assembly befindet.

Ich bin mir sicher, es gibt eine viel bessere Möglichkeit, diese Aufgabe zu erfüllen, aber ich habe nicht viel Erfahrung mit dem Auflösen von Assemblys und dem Durchlaufen von Namespaces innerhalb, um den Typ der Klasse zu lösen, die ich suche. Irgendwelche Ratschläge oder Tipps, um diese Aufgabe eleganter zu erfüllen?

+0

möglich Duplikat von [Type.GetType ("namespace.abClassName") gibt null zurück] (http://stackoverflow.com/questions/1825147/type-gettypenamespace-ab-classname-returns-null) –

Antwort

111

Sie werden den Namen der Assembly wie folgt hinzufügen:

Type.GetType("MyProject.Domain.Model." + myClassName + ", AssemblyName"); 

Mehrdeutigkeit zu vermeiden, oder wenn die Assembly im GAC befindet, sollten Sie einen voll qualifizierten Montage Namen wie solche bieten:

Type.GetType("System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"); 
+0

Excellent, I Ich wusste, dass mir etwas Kleines fehlte, einschließlich der Versammlung. Diese Lösung hat für meine Bedürfnisse funktioniert. Vielen Dank. – Brandon

+8

Und für diejenigen, die sich mit der Serialisierung befassen: Um den für die Assemblierung qualifizierten Namen zu erhalten, gibt es die Eigenschaft [Type.AssemblyQualifiedName] (http://msdn.microsoft.com/en-us/library/system.type.assemblyqualifiedname.aspx). –

+0

Wenn der Typ eine Liste ist, wobei T eine benutzerdefinierte Klasse ist, wie geben Sie 2 Assemblys an? Das heißt, die mscorlib-Assembly für System.Collections.Generic.List und die Bibliothek, die T? –

1

Können Sie eine der Standardmethoden verwenden?

Wenn nicht, müssen Sie Informationen zu Type.GetType über die Assembly hinzufügen.

1

Kurz und dynamischen Ansatz AssemblyQualifiedName Eigenschaft -

Type.GetType(Type.GetType("MyProject.Domain.Model." + myClassName).AssemblyQualifiedName) 
1

Laden Sie zunächst die Montage und dann den Typ. Beispiel: Assembly DLL = Assembly.LoadFile (PATH); DLL.GetType (typeName);

Verwandte Themen