Angenommen, ich habe eine Factory-Methode, die eine Instanz eines Typs erstellen möchte, der zur Laufzeit über Reflektion ausgewählt wird. Angenommen, meine Factory-Methode ist ein generischer Code, der nicht direkt auf die Assembly verweist, die den angegebenen Typ enthält, obwohl sie innerhalb einer Anwendung ausgeführt wird, auf die die erforderliche Assembly verweist.Wie kann ich einen Typ von einer referenzierten Baugruppe über Reflexion erhalten
Wie schreibe ich Code, der diesen Typ finden kann? Wenn ich Folgendes tue
public object CreateInstance(string typeName)
{
Type desiredType = Assembly.GetExecutingAssembly().GetType(typename);
// Instantiate the type...
}
scheint dies fehlzuschlagen, da der Typ nicht in der ausführenden Assembly definiert ist. Wenn ich alle Assemblys zur Laufzeit verfügbar machen könnte, könnte ich über sie iterieren und herausfinden, welche den gewünschten Typ enthält. Aber ich sehe keinen Weg, das zu tun. AppDomain.CurrentDomain.GetAssemblies()
sieht vielversprechend aus, aber gibt nicht alle Assemblys zurück, auf die ich in meinem Projekt verwiesen habe.
Bearbeiten: Mehrere Leute haben darauf hingewiesen, dass ich die Baugruppe laden muss. Das Problem ist, dass dieser Codeabschnitt nicht weiß, welche Assembly er laden soll, da ich versuche, diesen Code so zu schreiben, dass er nicht von den anderen Assemblies abhängt.
Ich habe bewusst die Details von typeName
weggelassen, da die Zuordnung von String zu Typ in meinem echten Code tatsächlich komplizierter ist. In der Tat wird der Typ durch ein benutzerdefiniertes Attribut identifiziert, das die angegebene Zeichenfolge enthält. Wenn ich jedoch eine Liste von Typen abrufen kann, habe ich kein Problem, die Liste auf den gewünschten Typ zu beschränken.
Was ist der Wert in typeName? Ist es der voll qualifizierte Name? –