Ich habe eine Reihe von Klassen, jeder ist ein anderer strategy, um die gleiche Arbeit zu tun.Erstellen Sie ein Objekt, das nur den Klassennamen kennt?
namespace BigCorp.SuperApp
{
public class BaseClass { }
public class ClassA : BaseClass { }
public class ClassB : BaseClass { }
}
Die Auswahl der zu verwendenden Strategie ist konfigurierbar. Ich möchte nur den Klassennamen 'ClassB' anstelle des vollständigen Typenamens 'BigCorp.SuperApp.ClassB' in der app.config-Datei konfigurieren.
<appConfig>
<SuperAppConfig>
<Handler name="ClassB" />
</SuperAppConfig>
</appConfig>
Allerdings scheitern die Reflexions Anrufe, weil sie die vollständigen Typnamen erwarten, vor allem
Type t = Type.GetType("ClassB"); // results in t == null
BaseClass c = Activator.CreateInstance(t) as BaseClass; // fails
Wie kann ich dies funktioniert, während nur die Klassennamen zu konfigurieren? Verketten Sie den Namespace mit dem Klassennamen für den vollständigen Typnamen? Gibt es noch einen weiteren Anruf, der funktioniert?
Wenn Sie denken, dass dies nutzlos ist und ich erwarten sollte, dass die Konfiguration den vollständigen Typnamen enthält, bin ich offen für diese Lösung! Begründe mich einfach, um mich zu überzeugen.
(Ich werde von außerhalb dieser Montage/Namensraum nicht eine Art werden geladen)
Ich könnte einfach einen IoC-Container verwenden, mit langen Namen umgehen und die Erstellung von Objekten für mich erledigen lassen! –