Hallo nochmals,
ich hänge nun bei einem weiteren Problem.
Da zu meinem Programm alle Klassen K1,K2,K3 usw. jeweils in eigenen assemblys liegen, habe ich keine allgemein assembly, in welcher alle zu erzeugenden Klassen liegen.
Somit reicht es klarerweise nicht mehr nur die auszuführende assembly der Factory mitzugeben, da innerhalb dieser assembly die klassendefinitionen nicht zu finden sind.
Daher müsste ich wohl hier schon am besten alle Assemblies mitschicken, oda so irgendwie und dann die Factory auswählen lassen, welche zu verwenden ist.
Mein Problem hierbei ist, ich weiß net, wie ich die Assemblys dynamisch dementpsrechen wetiergeben kann.
Mein Aufbau ist momentan folgender:
5Projekte: 01_genericAddinCall (Main-Methode, exe), classK1(dll), classK2(dll), classK3(dll), InterfaceClass(dll).
alle meine class-Klassen verweisen natürlich die InterfaceClass, in welchem sich die abstrakte ClassFactoy und eben das Interface befinden.
Meine HauptProjekt(01_genericAddinCall), verweist auf alles und hier befindet sich ja auch der aufruf zur Objekterzeugung.
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| static void Main(string[] args) { string classToUse = "K2";
IEnumerable<IInterfaceClass> kClasses = KClassFactory.CreateInstancesOf<IInterfaceClass>(classToUse, Assembly.GetExecutingAssembly());
IInterfaceClass IIC = KClassFactory.CreateClass(classToUse); foreach (var kClass in kClasses) { kClass.m1(); kClass.m2(); kClass.m3(); } Console.Read(); } |
An dieser Stelle weis ich nun nicht, wie ich weiterkomme bzw. wie ich es einrichten kann, dass am alle bekannten assemblies weitergegeben werden.
Hatte schon versucht mit Assembly.GetExecutingAssembly().GetReferencedAssemblies() die referenzierten assemblys zu übergeben, allerdings werden hier nur "aktive" assemlys aufgeführt, also welche von denen Funktionen bzw. Klassen auch bereits benutz werden.
Eine meiner weiteren Überlegungen war, das ich alle sonstigen Assemblies in einem Ordner ablegen lasse und einfach den Ordner alle Assemlies einlesen lassee odda so.
Wollte allerdings zuerst wissen, ob es hierfür vielleicht einen besseren Ansatz gibt.
Danke und viele grüße,
ironhaert
Ps: Ich hoffe es ist i.O. dass ich diese Frage an meinen alten Post angehängt habe, da ich dachte, da es noch mit dem alten Thema einen Bezug hatte. Ansonsten lösche ich den Post und mach en neuen Thread auf.