Griever: VB.NET >> Addins in VB.NET?

Hi.

Ich suche seit langem nach einer Möglichkeit, dynamisch Addins ins programm zu laden und zu verwenden.

Das ganze soll so von statten gehen:

Programmstart
Ornder [programmordner]\addins\ wird nach Addin-dll's durchsucht.
Die gefundenen DLL-Dateien werden versucht ins programm einzubinden.
(z. b. für neue Funktionen, die im Menü unter Extras > Addins >... erscheinen. oder für Funktionskorrekturen)

Wäre echt super, wenn jemand ein brauchbares Tutorial oder ein verständlichen Code posten könnte.

MFG
Griever

  1. Hallo,

    Ich suche seit langem nach einer Möglichkeit, dynamisch Addins ins programm zu laden und zu verwenden.
    Wäre echt super, wenn jemand ein brauchbares Tutorial oder ein verständlichen Code posten könnte.

    Ist zwar nicht in VB.NET aber es sollte doch recht leicht umzusetzen sein:
    http://www.codeproject.com/KB/cs/c__plugin_architecture.aspx

    Grüße
      Klaus

    1. Ist zwar nicht in VB.NET aber es sollte doch recht leicht umzusetzen sein:
      http://www.codeproject.com/KB/cs/c__plugin_architecture.aspx

      Scheint in C# zu sein. Das lässt sich problemlos mit SharpDevelop in VB.NET umwandeln.

      Danke für die Hilfe ^^ (aber das andere kapier ich überhaupt nicht)

      MFG
      Griever

  2. Hi,

    dafür benötigst du u.a. folgende Dinge:

    • eine Interface Deklaration um Typen (Klassen) als Plugins bedienen zu können (ohne zu wissen, wie diese innerlich funktionieren), ein Interface à la
      
    public interface IPluginOderWasAuchImmer  
    {  
       IContext Context { get; set; }    //  brauchst du u.U. für die Rückverbindung vom Plugin zum Host  
       void Execute();  
    }  
    
    

    sollte da schon mal geeignet sein

    • Eigene Attributklassen für Typen und Assemblies sind auch förderlich

    • du benötigst System.Reflection um Assemblies dynamisch zu laden und nach Typen (welche IPlugin implementieren und ggf bestimmte Attribute besitzen) zu durchsuchen

    • du benötigst (wahrschweinlich) ein Manager Singleton um die geladenen Plugin-Konfigurationen (welche Typen in welchen Assemblies) zu verwalten, damit du die Suche mit Reflection nicht ständig aufs neue durchführen musst

    • du benötigst dann ein Factory Pattern welches dir die Instanzen vom jeweiligen Plugin über das Interface erstellt

    However, ich persönlich würde die Sache über Commands lösen, was aber am vorher geschriebenen äusserst wenig ändert. ;)

    Ciao, Frank