Implementieren Sie Teilmethoden für mehrere Assemblys

7

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

    
Bill 24.01.2011, 13:46
quelle

7 Antworten

2

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.).

    
James Fernandes 16.08.2012, 21:17
quelle
14

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:

  1. Angebotsereignisse
  2. Machen Sie die Methoden virtuell und setzen Sie sie außer Kraft
  3. Verwenden Sie eine Schnittstelle

Ihr Problem sieht so aus, als ob es am besten zu Ereignissen passt. Der Benutzer kann sie einfach in der anderen Assembly abonnieren.

    
CodesInChaos 24.01.2011 13:49
quelle
1

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.

    
Justin Niessner 24.01.2011 13:50
quelle
1

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.

    
Brian Mains 24.01.2011 13:56
quelle
1

Sie (oder der Benutzer) können Erweiterungsmethoden verwenden: Ссылка

    
r03 29.08.2011 20:12
quelle
0

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.

    
Matthew Whited 24.01.2011 13:51
quelle
0

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.

    
NepdeBrio 12.08.2012 13:25
quelle

Tags und Links