Ich habe den Namen einer statischen Klasse als String und möchte nun auf eine Methode dieser statischen Klasse zugreifen. Wie komme ich da ran? (Es sind unterschiedliche "Factory"-Klassen, die alle Instanzen von Objekten zurückliefern, die ein bestimmtes Interface implementieren.)
string myStaticClassName = "myABCFactory"; var myObject = ???myStaticClassName???.FactoryMethod();
*Update* Die Lösung sieht nun so aus:
Type factoryType = Type.GetType("myFullqualifiedClassName"); MethodInfo mi = factoryType.GetMethod("FactoryMethod", new Type[0]); object myObject = mi.Invoke(null, null);
auch wenn es bestimmt vom Design her bessere Möglichkeiten gibt ist das mit Reflection möglich. Dabei aufpassen dass null als object übergeben wird, da es sich um einen statischen Typ handelt.
Type type = Type.GetType("myFullqualifiedClassName"); MethodInfo mi = type.GetMethod("FactoryMethod", BindingFlags.Static); object myObject = mi.Invoke(null);
Habs nur so runtergetippt - vllt. lässt sich das so nicht kompilieren ;-)
Ok, grundsätzlich geht es damit. Nur hatte ich vergessen zu erwähnen, dass es neben der .FactoryMethod ohne Parameter noch eine überladene Variante mit einem String Parameter gibt. Jetzt muss ich das vermutlich irgendwie mit den Bindings lösen?!