Frank (no reg): Grundlegendes über eine Plugin Schnittstelle

Beitrag lesen

Hi JP,

Plug-ins sind ein Software Design Pattern. Wobei für einen bestimmten Plug-In-Typen, welcher eine bestimmte Funktion unterstützen, erweitern soll, z.b. ein X.509 Zertifikat o.ä. laden, ein Interface mit einer zu implementierenden Methode (oder/und auch Properties) geschrieben wird, welches öffentlich ist.

Um es mit C# auszudrücken:

public interface ICertificatePlugin
{
   string Fingerprint { get; }

void LoadCertificate();
}

Du schreibst dann deine Implementierung der jeweiligen Properties und Methoden, kompilierst das ganze, packst es in einen Ordner, wo die Hauptanwendung das Kompilat (.dll o.ä.) laden kann. z.b.

public class X509CertLoader: ICertificatePlugIn
{
    private string fingerprint = string.empty;
    // c'tor
    public X509CertLoader() { }

// implementing the property defined by the interface
    public string Fingerprint
    {
       get { return this.fingerprint; }
    }

// implementierung der eigentlich geforderten Methode
    public void LoadCertificate
    {
       // ... dein Programmcode
    }
}

Wenn jetzt die Hauptanwendung dein Plug-In ausführen möchte, wird sie (wenn nicht schon beim Start getan) deine Komponente laden und als Objekt instanzieren. Anhand der Angabge, welches Interface du implementierst kann sich die Hauptanwendung darauf verlassen, dass es eine bestimmte Methode/Property in deinem Objekt aufrufen kann. Dies tut es dann auch.

Der ganze Vorgang wird von meist einem "Manager"/"Singleton" Pattern begleitet, welches dafür verantwortlich ist:

  • zu schauen welche Plug-ins da sind
  • diese zu laden und zu instanziieren
  • die Interface-Methode eines bestimmten instanziierten Objektes aufzurufen

Wenn du da genauer drüber bescheid wissen möchtest, schau dir am besten folgende Literatur an:  http://www.amazon.de/exec/obidos/ASIN/0201633612/ref=ed_of_dp_1/302-6419383-1160809

HTH, Ciao, Frank

P.S. ich übernehme keine Garantie für die Vollständigkeit und fachliche Unfehlbarkeit meiner Angaben :-)