Software mit PlugIns, möglich?

  • VB.NET
  • .NET (FX) 4.0

Es gibt 22 Antworten in diesem Thema. Der letzte Beitrag () ist von Vainamo.

    Software mit PlugIns, möglich?

    Hi Leute :)

    Der Titel ist Programm.
    Ich bin gerade an einer "Zentralen" Software dran. Über diese sollten sich, bequem andere Softwares die zum Beispiel einer von euch schreibt, inhärieren lassen.

    Das Ziel ist es, eine Software zu proggen, die sich unendlich erweitern lässt. Ich will das Grundgerüst erstellen und ihr könnt es erweitern so zu sagen.
    Dies fällt mir aber ein bisschen schwierig, da ich nicht genau weiss, wie man das am Besten lösen kann.

    Der Aufbau der Software ist recht simpel, es ähnelt dem, eines Webbrowser. Hierfür habe ich extra ein eigenes Tabcontrol entwickelt. Zudem habe ich 2 Standardapps selber erstellt, ein einfacher Notepad mit AES256 Verschlüsselungmöglichkeit und ein "Zeig mein PC" App. (war nur zu Testzwecken)

    Meine Fragen an euch:
    1. Wäre sowas möglich zu realisieren?
    2. Was bräuchte es alles dazu?

    Um jeden Input von euch Profis bin ich froh, ich komm echt nicht mehr weiter. :thumbup:
    Ich könnte mir auch vorstellen, dies mit mehreren Personen zusammen zu entwickeln, falls jemand Lust und Zeit hat.

    Schaut's euch doch einfach mal an und gebt mir doch bitte Inputs!

    Danke im Voraus :thumbsup:
    Bilder
    • step1.PNG

      131,99 kB, 1.053×877, 161 mal angesehen
    • step2_1.PNG

      134,61 kB, 1.371×863, 149 mal angesehen
    • step2_2.PNG

      119,41 kB, 1.366×857, 145 mal angesehen
    • step3.PNG

      140,81 kB, 1.371×862, 130 mal angesehen
    • step4.PNG

      201,15 kB, 1.371×1.096, 131 mal angesehen
    • step5.PNG

      194,87 kB, 1.371×1.087, 128 mal angesehen
    • step6.PNG

      194,78 kB, 1.522×1.156, 125 mal angesehen
    • step7.PNG

      148,91 kB, 1.792×1.142, 131 mal angesehen
    • step8.png

      177,52 kB, 1.786×1.144, 133 mal angesehen
    "Die menschliche Vorstellungskraft ist unendlich"
    ->Versuch dir mal 'ne neue Farbe auszudenken!

    Mit Schleifen kann man alles lösen!

    Dim d as Double = 1
    Do until d = 0
    d = (d / 2)
    Loop
    Cooles Projekt, gute Idee, interessiert mich (jetzt) ebenfalls mit diesem Plugin/Addin-System :D
    Du hast ja immer 2 Möglichkeiten: Entweder bindest du alle Module bereits ein, die du zulassen magst und kannst die im Nachhinein Aktivieren/Deaktivieren oder wie du es schreibst, jeder Macht sein Plugin, drückt auf auswählen und das Ding ist geladen.

    Zweiteres natürlich viel eleganter! :thumbsup:
    Ich denke da wirst du nicht drum herum kommen, eine Grundstruktur den anderen Programmieren vorzugeben. Wie diese Aussieht und was diese beinhalten muss - k.A. :huh:

    Oder- eine nicht allzu elegante Lösung: du bindest das andere Programm in deine Form ein. -> Aus meiner Sicht kein richtiges PlugIn-System.

    Ich hoffe es wird jemand die notwendige Erleuchtung bringen :D


    LG Acr0most
    Wenn das Leben wirklich nur aus Nullen und Einsen besteht, dann laufen sicherlich genügen Nullen frei herum. :D
    Signature-Move 8o
    kein Problem mit privaten Konversationen zu Thema XY :thumbup:
    @M-Stef Das ist ja genau das, worauf wir alle gewartet haben. :D
    Wir haben schon mal für Dich die Suchfunktion befüllt, Stichwort pluginsystem, 122 Treffer.
    Ich empfehle diesen hier.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @Acr0most

    Ja, dies ist genau das Dilemma. Das mit den EXE in der Laufzeit in einem meiner Tabcontrol zu laden, ist überhaupt nicht schön. Hab es schon probiert -> Katastrophe. Es verzieht zum Teil Sachen. X/
    Eine Grundstruktur muss man mitgeben, das ist auf jeden Fall klar. Aber dennoch möchte ich nicht zu viele Einschränkungen machen.

    @RodFromGermany
    Diese Tutorials mit den Plugins habe ich schon gesehen, aber ich verstehe nicht ganz, wie man die vom Pluginentwickler entwickelte DLL in mein Tabcontrol übertragen kann. Das steht nirgends gut beschrieben.
    Weisst du das vielleicht?
    Ich will ja nicht nur Funktionen implementieren, sondern ihr ganzes Design mit dazu.

    Oder eventuell erstelle ich eine eigenen Entwicklungsumgebung, mit dem man die Addins erstellen kann. Dieser gibt alle Parameter mit was meine Software braucht und meine Software erstellt die Controls aufgrund der definierten Parameter. Dann könnten die Addins einfache Textdateien sein (theoretisch)
    "Die menschliche Vorstellungskraft ist unendlich"
    ->Versuch dir mal 'ne neue Farbe auszudenken!

    Mit Schleifen kann man alles lösen!

    Dim d as Double = 1
    Do until d = 0
    d = (d / 2)
    Loop

    Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von „M-Stef“ ()

    M-Stef schrieb:

    die vom Pluginentwickler entwickelte DLL
    muss lediglich Dein Interface implementieren und feddich.
    Oder
    Du musst Deine Software für das Interface des Pluginentwicklers vorbeereiten / fit machen und feddich.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Was für mich noch nicht hervorgeht:

    Kann ich auch eine GUI sprich Form o.ä. über das PlugIn laden?


    Ich denke das wäre ja für das Vorhaben des TE ausschlaggebend.


    LG Acr0most
    Wenn das Leben wirklich nur aus Nullen und Einsen besteht, dann laufen sicherlich genügen Nullen frei herum. :D
    Signature-Move 8o
    kein Problem mit privaten Konversationen zu Thema XY :thumbup:
    Ja das geht ohne Probleme, Zauberwort UserControl.

    Zum Thema Plugin: Managed Extensibility Framework (MEF) -> MEF Teil 1 – Grundlagen, Imports und Exports
    Vielen Dank für eure Hinweise.
    Ich komme aber immer noch nicht dahinter, wie ich die Plugin DLL in mein tabcontrol.tabpage implementieren und ausführen kann.

    Statt mich auf Links zu verweisen die ich schon alle gelesen habe, könntet ihr mir doch vielleicht den integrationssnippet zeigen
    "Die menschliche Vorstellungskraft ist unendlich"
    ->Versuch dir mal 'ne neue Farbe auszudenken!

    Mit Schleifen kann man alles lösen!

    Dim d as Double = 1
    Do until d = 0
    d = (d / 2)
    Loop

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „M-Stef“ ()

    1. Plugin Interface mit UserControl Property erstellen
    2. Plugin Interface in der Library implementieren
    3. Im Plugin Host das UserControl instanzieren und dem TabControl hinzufügen
    @M-Stef Ist doch ganz einfach.
    Deine Plugin-DLL liefert ein UserControl, dass Du für Deine TabPage instanziieren und an Position (0, 0) der TabPage darstellen musst.
    Wenn Du den Code ordentlich strukturierst, hast Du grob gesagt eine Zweiteilung, ein Teil erstellt die Instanz vom Plugin, der andere Teil richtet die TabPage via UserControl ein.
    Da kannst Du auch "eigene" TabPages erstellen, dh., die nicht via Plugin, wohl aber vis UserControl kommen.
    Vergiss nicht, dem Plugin Events mitzugeben, damit Dein Hauptprogramm über das TabControl informiert werden kann, wenn was zu tun ist.
    =====
    Zu Deiner Signatur:

    VB.NET-Quellcode

    1. Dim count = 0
    2. Dim d As Double = 1
    3. Do Until d = 0
    4. d = (d / 2)
    5. If count Mod 100 = 0 Then
    6. ListBox1.Items.Add(d)
    7. ListBox1.Update()
    8. End If
    9. count += 1
    10. Loop
    11. ListBox1.Items.Add("")
    12. ListBox1.Items.Add(count)
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „RodFromGermany“ ()

    Aber Linux allgemein wird es noch viel länger geben, möglicherweiße länger als Windows ansich. Also sollte man doch vorraus denken und das eben nicht verwenden, weil das mW nicht für Linux portiert wurde und vmtl. auch nie passieren wird.
    Abgesehen davon dürfte das um vieles langsamer sein als direkte Calls.

    Also ich halte Plugins persönlich als sinnvoller. Das von dir sieht mir etwas nach nem Stück zurück aus(In Richtung IPC^^)

    Edit: Was natürlich nicht heißen soll, dass das bzw. IPC keine Daseinsberechtigung haben
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    Moin Leute,

    ich muss hier dennoch nochmal nachfragen.

    So oft ich mir auch die Posts von #3 - #16 durchlese, ich komme über folgende Denkblockaden nicht hinweg:

    1) Ich definiere ein Interface. Ja, schön. Aber das würde heißen ich kann nur Plugins erstellen die vorgegebene Funktionen erstellen ODER ich muss für jedes Plugin mit speziellen Funktionen ein eigenes Interface anlegen.

    2) Das mit der Form habe ich noch immer nicht verstanden. Wir haben eine Haupt-Applikation. Dieser möchte ich per PlugIn ein Repertoire an Funktionen und Controls/Forms hinzufügen.

    Hat jemand ein Beispiel wie man da richtig ran geht?
    Das Bspw. von @mikeb69 habe ich schon durchgemacht und auch verstanden.

    Bestes Beispiel für Blockade #1: Jedes PlugIn was ich schreiben möchte, muss eine Funktion Addieren und das Prop Datum haben.
    -> Macht doch aber keinen Sinn wenn ich meine Main-App durch viele verschiedene PlugIns erweitern will. :o

    Danke schon mal im Voraus.
    LG Acr0most :thumbsup:
    Wenn das Leben wirklich nur aus Nullen und Einsen besteht, dann laufen sicherlich genügen Nullen frei herum. :D
    Signature-Move 8o
    kein Problem mit privaten Konversationen zu Thema XY :thumbup:
    Das komplizierteste ist eigt. nur in wie weit mit der Hauptapplikation/anderen Plugins interagiert werden muss.

    Nehmen wir an die funktionieren alle komplett autark und jedes Plugin bekommt einfach nen Tab in nem TabControl, dann reicht ja dieses Interface bereits aus um alles zu machen(es geht mir nicht darum ob das auch sinnvoll ist :D):

    C#-Quellcode

    1. interface IPlugin
    2. {
    3. Control MainControl{get;}
    4. }


    Und schon muss man nach dem laden der plugins nur einmal instanzieren und MainControl zu dem TabControl adden und fertig. Evtl. noch ne Create methode, damit dort der teil reinkommt, der aufm UI-Thread passieren muss oder so und man das erstellen selbst auf nem extra Thread machen kann...

    Und eine Sprache hat auch nur begrenzt viele Befehle, jedoch kannst du damit trotzdem alles programmieren. Mit interfaces ist es hier dasselbe, du musst nur hinreichend viele(und entsprechende) interfaces machen, sodass all das möglich ist was du möchtest, aber trotz all dem so allgemein wie möglich bleibst..
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    @acromost:
    Jo - so ist das aber.
    Man kann nicht beliebigen Kram dranpatchen wie wolle, sondern das PlugIn muss genau auf das passen, was vonne Hauptanwendung als Anschlussstelle vorgesehen ist.
    Deswegen heists ja "PlugIn" (Stecker-Dose-Prinzip).

    Imo werden PlugIns total überbewertet - tatsächlich gibts nur ein sehr eingeschränktes Use-Case-Segment, wo sie wirklich sinnvoll sind.
    @ErfinderDesRades
    ja, okay. In wiefern ein Plugin-System bei den jeweiligen Anwendungen sinnvoll ist - ist m.M.n. erstmal nebensächlich. Es geht mir lediglich ums Verständnis. Danke dennoch für die Ausführung.

    @jvbsl
    Bei deinem Vorschlag wäre es ja wie folgt: Ich implementiere meine Programmlogik mit ins User-Control und setze dann nur durch diverse Properties die jeweiligen Abhägigkeiten wie Datenbanken, Speicherpfade, o.ä.?


    Gibt es denn für solche Erweiterungen - die zwar eingebunden werden sollen, aber nicht umbedingt als Plugin angesehen werden können, eine andere Möglichkeit sie in eine Haupt-Applikation einzubinden?


    LG Acr0most
    Wenn das Leben wirklich nur aus Nullen und Einsen besteht, dann laufen sicherlich genügen Nullen frei herum. :D
    Signature-Move 8o
    kein Problem mit privaten Konversationen zu Thema XY :thumbup: