2009-08-01 10 views
3

Ich habe eine datengesteuerte Mapping-Anwendung, wo ich benutzerdefinierte Funktionen als Plugins implementieren muss. Der Name der benutzerdefinierten Methode, die ich ausführen muss, befindet sich ebenfalls in den Zuordnungsdaten. Ich weiß, dass ich die Methode mit dem Befehl invoke aufrufen kann; Aber wie kann ich sicherstellen, dass jede Methode die entsprechende Signatur hat?Brauchen Sie Hilfe beim Definieren einer Schnittstelle in C#

+0

Können Sie ein Beispiel geben? –

Antwort

1

Zunächst denke ich nicht, dass Sie willkürliche Namen für die überschriebenen Methoden zulassen sollten - definieren Sie einfach eine Schnittstelle und halten Sie es einfach.

Sie könnten eine Schnittstelle mit einer Methode definieren, die einen Delegaten an die Methode zurückgibt, die die Arbeit ausführt.

Andernfalls müssen Sie nur Reflection verwenden, um die MethodInfo für die zugeordnete Methode abzurufen und zur Laufzeit zu überprüfen, ob die richtige Signatur vorhanden ist.

+0

Die Namen sind nicht willkürlich. Ein hauseigener Entwickler wird die benutzerdefinierten Funktionen erstellen und die Namen in die Datenbank einfügen, sodass unsere Benutzer sie auf eine bestimmte Karte anwenden können. Wenn mein Dienst die Karte anwendet, muss er die benutzerdefinierte Funktion aufrufen, um die Aufgabe abzuschließen. Ich versuche zu vermeiden, die Anwendung jedes Mal neu zu kompilieren, wenn eine neue benutzerdefinierte Funktion benötigt wird. Ehrlich gesagt, Reflexion/Schnittstellen/Delegierte sind ein bisschen komplizierter als ich es gewohnt bin. In der Zwischenzeit werde ich wahrscheinlich früh binden. Aber ich muss wissen, wie man das auf eine ausdehnbarere Weise macht. –

+0

Schnittstellen sind überhaupt nicht kompliziert, und jedes Anfänger C# Buch wird Ihnen beibringen, wie man sie benutzt. –

+0

Die 'benutzerdefinierten Funktionen' - sind sie SQL oder C# oder was? Dein Dienst ist C#? –

1

Wenn Sie eine Plugin-Architektur entwickeln, definieren Sie normalerweise eine Schnittstelle mit den Methoden, die Sie im Plugin aufrufen. Das Plugin wird benötigt, um die Schnittstelle zu implementieren. Wenn Sie es laden, werfen Sie es als Schnittstelle aus (wenn es es nicht implementiert, wird dies fehlschlagen) und es in Ihrem Code als die Schnittstelle verwenden. Wenn das Verhalten des Plugins allgemeiner ist, definieren Sie einfach Ihre Schnittstelle generischer, indem Sie zum Beispiel die Konfiguration verwenden, um die Parameter des Plugins festzulegen, und dann eine einfache Methode ohne Argumente verwenden, um die Funktionalität des Plugins aufzurufen. Ich denke, Sie werden es leichter finden, mit einer vordefinierten Schnittstelle zu arbeiten, und das sollte Sie nicht zu sehr einschränken.

1

Sie müssen Reflexion verwenden.

Sie müssen zuerst die GetMethod() Methode aufrufen, um das Objekt MethodInfo für die betreffende Methode zu erhalten.

Dann müssen Sie die Methode verwenden, um die Parameter der Methode zu erhalten, dann müssen Sie diese mit dem vergleichen, was Sie erwarten, die Methode zu haben.

Verwandte Themen