Ich habe ein paar Beispiele gesehen, die mir vielleicht helfen könnten, aber ich habe nicht so viel Zeit, sie zu erforschen, als ich gerade herausfand, dass meine Chefs dies eine Woche früher als geplant demonstrieren müssen Ich möchte diese neue Funktionalität hinzufügen. Ich werde versuchen, das kurz und bündig zu halten.
Ok, das ist wie in meinem zehnten Mal, als ich versuche, das zu korrigieren, damit es klar wird, hoffentlich. Dies ist eine Anwendung. Datenzeilen müssen in einer DataGridView angezeigt werden (fertig). Einige Zeilen werden basierend auf Berichten (abgeschlossen) unterschiedlich markiert. Die meisten Berichte haben ihre eigene SQL-Datei und werden zur Laufzeit aus einer INI-Datei (fertig) implementiert. Einige Berichte müssen jedoch eine Funktion aufrufen. Die Anwendung verwendet eine SQLite-Datenbank. Ich möchte DLLs haben, die Berichte sind, die alle das gleiche Format haben und alle eine Liste von ReportRecord zurückgeben. ReportRecord ist eine Klasse, die in meiner Hauptanwendung definiert ist, aber ich würde sie auch in jeder DLL definieren, wenn sie erstellt werden. Ich möchte die DLL instanziieren, rufen Sie es "GetRecords" -Funktion, und verwenden Sie es in meiner Hauptanwendung. Hier ist ein Pseudocode. Wenn ihr mir sagen könnt, ob es möglich ist, oder mir eine bessere Möglichkeit gibt, dies zu tun, würde ich es begrüßen.
PSUEDOCODE
%Vor%Gibt es das überhaupt?
Gegenwärtig habe ich folgendes zu ergänzen, bis ich das herausgefunden habe:
%Vor%Danke allen.
Edit : Entschuldigung, Jungs, wenn man sich dieses Zeug ansieht, macht es mich ehrlich gesagt dumm. Wie, mein Verstand geht leer und alles und kann sich nicht darauf konzentrieren. :) Was ihr gegeben habt, ist wahrscheinlich der beste Weg, aber da ich am Dienstag eine hochwertige Demo fertig haben muss und es keine weiteren Berichte mehr geben sollte, die Funktionen bis dahin benötigen, werde ich das offen halten. Sobald mein Chef aus der Stadt ist, um es zu demontieren, werde ich daran arbeiten, dies zu implementieren. Aber im Moment wird es unbeantwortet bleiben, es sei denn, ich sehe ein Beispiel, das sehr (für Zweijährige) sehr einfach ist.
Sehen Sie sich das nicht in Form von DLLs an, bei denen es sich um Rohdateien handelt, sondern um Assemblies, bei denen .NET Dinge sieht. Sie können eine Assembly mit Assembly.Load
laden. Haben Sie eine allgemeinere Lösung in Betracht gezogen, zB Inversion der Kontrolle ?
Sie können einfach ein C # -Bibliotheksprojekt erstellen, das die folgenden Schnittstellen implementiert, und die Binärdatei in der Datenbank oder im Dateisystem speichern. Sie könnten dann die Assembly aus dem rohen Assembly-Byte / Dateipfad laden und ein Objekt instanziieren. Mit Reflection können Sie den Konstruktor auch direkt aufrufen, aber ich bevorzuge das Fabrikmuster für solche Aufgaben.
%Vor%Ich verstehe nicht wirklich, was genau Sie versuchen, und IOC ist wahrscheinlich der Weg, hier zu gehen. Aber von dem, was ich verstehe, könntest du das mit reiner Reflexion tun.
Wohlgemerkt, das ist bei weitem nicht der ideale Weg, um solche Dinge zu tun, aber Sie fragen danach:)
Hier geht es (oben auf meinem Kopf, also erschießt mich nicht, wenn etwas nicht stimmt, es sollte ziemlich nah sein, aber nicht narrensicher)
%Vor%Betrachten Sie eine Plugin-Architektur, z. B. das Managed Extensibility Framework , um Ihre Berichtsmodule zu verwalten.
Vielleicht sollten Sie das Managed Extensibility Framework dafür in Betracht ziehen. Es macht diese Art von Operation trivial.
Sie können es oben für .NET 3.5 herunterladen (es ist bereits im Framework in .NET 4). Wenn Sie MEF verwenden, können Sie einfach die Sammlung aller exportierten "Berichte" über einen DirectoryCatalog auf einmal importieren und es wird die gesamte Verkabelung für Sie erledigen.
Weitere Informationen finden Sie in der Hilfe zu Collections hier importieren .