In einer der Anwendungen, an der ich arbeite, sind zwei grundlegende Funktionen enthalten: Erstellen und Aktualisieren.
Allerdings ist es manchmal notwendig, benutzerdefinierten Code hinzuzufügen, also habe ich daran gedacht, den Code zu erweitern, indem Sie Dritten erlauben, ihren eigenen Code zu schreiben und einzubetten:
OnCreating OnCreated OnUpdating OnUpdated
Gibt es eine Möglichkeit, das oben genannte für mehrere Assemblys zu aktivieren? MEF könnte hier helfen?
Danke Grüße
Vielen Dank für Ihre Antworten.
Eine solche Schnittstelle bedeutet, dass jede externe Baugruppe diese Schnittstelle nach Bedarf implementieren muss. Dann muss der Code meiner Anwendung die aktuell laufenden Assemblies durchlaufen, alle Klassen erkennen, die diese Schnittstelle implementieren, und ihre Methoden ausführen?
Passt MEF hier? Ich kann die Implementierung von externen Baugruppen exportieren und sie in meine App importieren?
Danke Grüße
In Bezug auf Ihre MEF-Frage könnten Sie wahrscheinlich Folgendes tun, um Methoden von einer Schnittstelle aus auszuführen:
%Vor%Oder erstellen Sie eine Schnittstelle mit Ereignissen wie von Brian Mains vorgeschlagen:
%Vor%dann würde der obige Code eher wie folgt aussehen:
%Vor%Ich denke, ich mag Letzteres für die von Ihnen angegebenen Methodennamen. Für meine Plugin-Arbeit habe ich eine Schnittstelle ähnlich der folgenden erstellt:
%Vor% Die Methode " RegisterEntities()
" erweitert das Datenbankschema zur Laufzeit und die Methode " SeedFactoryData()
" fügt Standarddaten hinzu (z. B. Hinzufügen eines Standardbenutzers, Vorauffüllung der Cities-Tabelle usw.).
Sie können über Assemblies keine particularen Klassen haben, da partielle Klassen ein Sprachfeature und kein CLR-Feature sind. Der C # -Compiler führt alle Teilklassen zu einer echten Klasse zusammen, und diese einzelne Klasse ist das einzige, was nach der Kompilierung übrig bleibt.
Sie haben ein paar Alternativen:
Ihr Problem sieht so aus, als ob es am besten zu Ereignissen passt. Der Benutzer kann sie einfach in der anderen Assembly abonnieren.
Partielle Klassen, die in Assemblys unterstützt werden, werden nicht unterstützt.
Der Grund dafür ist, dass alle partiellen Klassendefinitionen während der Kompilierzeit zu einer einzigen Klasse zusammengefasst werden. Diese einzelne Klasse befindet sich in einer einzelnen Assembly.
Erwägen Sie die Verwendung einer Schnittstelle:
%Vor%Und dann verwenden Sie diese Schnittstelle, um benutzerdefinierten Code hinzuzufügen; Jede dritte Partei kann diese Schnittstelle implementieren (entweder sie oder Sie können durch einen Wrapper) und dies kann eine Bindung in das Hinzufügen von benutzerdefinierten Geschäftslogik sein.
HTH.
Partielle Methoden und Klassen müssen sich in derselben Assembly befinden. Partielle Methoden werden zusammengestellt, wenn sie nicht verwendet werden. Wenn Sie Erweiterungspunkte für Ihre Klassen benötigen, sollten Sie in virtuelle Methoden oder Ereignisse schauen.
Partielle Klassen in Assemblys werden nicht unterstützt, da das Konzept hinter der partiellen Klasse darin besteht, mehreren Entwicklern zu erlauben, verschiedene Methoden und Member für dieselbe Klasse in einem bestimmten Namespace beizutragen.
Dies wurde gemacht, um Entwicklern zu helfen, den Code in einer einzigen Klasse innerhalb einer Assembly zu synchronisieren, die nach der Kompilierung erstellt wurde.