MEF einzelnen Plugin einen Wert übergeben.

  • Allgemein

Es gibt 32 Antworten in diesem Thema. Der letzte Beitrag () ist von Artentus.

    Nein. Das meine ich nicht ganz.
    Ich meine nur, das das Plugin keine Funktionen oder Methoden ausführt. Heißt, aktiv ist.
    Ganz simpel:

    VB.NET-Quellcode

    1. ''' <summary>
    2. ''' Ladet alle Plugins.
    3. ''' </summary>
    4. Private Sub LoadPlugins()
    5. verbindung.LoadPlugins()
    6. lPlugins = New List(Of Plugins.IPlugin)
    7. For Each plugin As Plugins.IPlugin In verbindung.Plugins
    8. lPlugins.Add(plugin)
    9. Next
    10. End Sub

    Das Problem war einfach das ich die Liste nicht als New definiert war.
    Mfg: Gather
    Private Nachrichten bezüglich VB-Fragen werden Ignoriert!


    Gather schrieb:

    Das Problem war einfach das ich die Liste nicht als New definiert war.
    Und da ist keine NullReferenceException geflogen? manchmal verhält sich sowas echt komisch. ?(

    Naja, wie dem auch sein, zu deinem neuen Problem:
    Die Plugins führen also Asynchron irgendwas aus? Du könntest dann z.B. eine IsBuisy-Readonly-Property auf dem Plugin-Interface deklarieren, das die Plugins dann entsprechend setzen. Möglich wäre zusätzlich auch noch ein Event, wenn die Arbeit abgeschlossen ist.
    Neinein.
    Ich meine, Ich habe eine CheckedListbox, dort befinden sich alle Plugins, und wenn ein Plugin (Listboxitem) Checked True ist, führt es die funktionen aus die eingebaut sind.
    Mfg: Gather
    Private Nachrichten bezüglich VB-Fragen werden Ignoriert!


    Joa, aber auch beim Laden.
    Heißt, wenn das Plugin das letzte Mal aktiviert wurde wird es beim laden auch ausgeführt.

    Wie gesagt, ich habe eher das "problem" beim laden und hinzufügen der Plugins. Ob es aktiv ist usw.
    Mfg: Gather
    Private Nachrichten bezüglich VB-Fragen werden Ignoriert!


    Ok. Dann Schritt für Schritt, so soll es ablaufen:

    1. *User ladet Plugins in die CheckedListbox* -> Keines der Plugins ist aktiv (Checked = False)
    2. *User aktiviert Plugin* -> Checked einen Plugin-Eintrag in der Listbox. (--> Aktiviert Plugin)
    3. *Plugin das aktiviert wurde führt seine Aktionen aus*
    4. *User beendet Programm* (--> Alle gechecked Listboxitems werden gespeichert.)

    Start 2:
    1. *User startet das Programm*
    2. *Plugins werden geladen* (in die CheckedListbox)
    3. *Program überprüft, ob Plugin beim letzten mal Aktiv war* (--> Ließt die gespeicherten, gechecketen Items aus) [Wenn ja -> ListboxItem.checked = True]
    4. *-> Das gerade eben durch die Checked = True Property aktivierte Plugin, darf nun seine Funktionen ausführen.*
    Mfg: Gather
    Private Nachrichten bezüglich VB-Fragen werden Ignoriert!


    Also wenn ein Item gecheckt wurde, wird das ItemCheck-Event ausgelöst, das sollte bereits ausreichen, um an das richtige Plugin zu gelangen.
    Speicher lässt sich das vermutlich am besten, indem du jedes ausgewählte Plugin (oder halt dessen Namen) in eine Datei schreibst. Beim Start der Anwendung liest du diese Datei einfach wieder aus, suchst für jeden namen das entsprechende Plugin, checkst das zugehörige Item in der Listbox und führt die gewünschte Funktion aus.
    Okey,
    Eine Kurze frage hätte ich noch, die wird wahrscheinlich leicht dumm klingen, aber...
    wie finde ich am besten das zugehörige Item heraus?
    Mfg: Gather
    Private Nachrichten bezüglich VB-Fragen werden Ignoriert!


    Ja aber, nehmen wir an, ich habe eine Textdatei, in dieser befinden sich pro Zeile die jeweilis zu letzt aktivierten Plugins.
    Z.B.

    Quellcode

    1. ClientQuery
    2. Lua Plugin
    3. Test Plugin
    4. TeamSpeak 3 Overlay Plugin


    Die werden beim Programmstart ausgelesen, und jenachdem wenn diese mit dem Plugin.Name übereinstimmen, wird die Eigenschaft
    Plugin.IsEnabled ausgeführt.
    Mein Problem ist, wie ich die Items in dem Textdokument mit den Plugin.Name vergleiche, und wenn sie dort vorhanden sind, die .checked Eigenschaft zu setzen...
    Mfg: Gather
    Private Nachrichten bezüglich VB-Fragen werden Ignoriert!


    Also angenommen, du hast eine List(Of IPlugin) an eine CheckedListBox gebunden. Dann liest du zunächst mal die Datei mit File.ReadAllLines aus, das ist am einfachsten, z.B. in ein String-Array. Jetzt kannst du einfach mit ForEach die Plugin-Liste durchlaufen und prüfen, ob ein Pluginname in dem Array vorkommt. Wenn das der Fall ist, setzt du die CheckBox und führst die gewünschten Dinge mit dem Plugin durch. Eine CheckBox im der CheckedListBox kannst du mit CheckedListBox.SetItemChecked aktivieren.
    Du müsstest aber mal ausprobieren, ob du das Aufrufen deiner gewünschten Funktion/Methode/was auch immer überhaupt manuell durchführen musst, oder ob nicht sowieso schon der ItemCheck-Eventhandler aufgerufen wird, der das ja tut.