Plugin System mit mehren dll's

  • VB.NET

Es gibt 16 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Plugin System mit mehren dll's

    Hi,

    Ich habe vor ein plugin sys zucoden. eine einfache version hab ich hin bekommen mit einer dll und einer funktion im interface. für diese zwecke habe ich das tut verwendet [VB.NET] Wie erstelle ich ein PlugIn System unter VB.NET (Framework 2)

    mein problem ist nun das ich mehre dll haben will und es mit dem interface nicht ganz so hinbekomme und langsam daran verzweifle. von code her war ich jetzt soweit das ich einfach mehre funktionen in das interface gehauen habe. dann wollte ich aber nur die funktion die ich gerade haben will verwenden jedoch haut der mir dann alle funktionen des interface in eine dll rein was ich nciht will diese soll getrennt sein. und da komme ich immo nicht weite.

    Darkronight schrieb:

    jedoch haut der mir dann alle funktionen des interface in eine dll rein
    Ja und?
    Alle im Interface deklarierten Prozeduren wollen implementiert werden, das ist der Sinn eines Interfaces.
    Sonst würde ja der Nutzer einer solchen DLL ins Leere greifen.
    Wenn Du mehrere PlugIn-DLLs machen willst, musst Du für jede einzelne ein entsprechendes Projekt Deiner Projektmappe hinzufügen und entsprechend implementieren.
    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!
    Ja das is mir bewust das ich für jede dll ein projekt machen muss. nur wenn es jetzt mit dem interface zusache kommt und ich dort alle funktionen reinmache die ich für alles brauche und dann eine dll nehme macht der mir alle funktionen in eine dll rein wo bei nur eine gebraucht wird. verstehste ?

    Darkronight schrieb:

    verstehste ?
    Verstehst Du, dass ein (fiktiver) Nutzer Deines Plugin-Systems mehrere unterschiedliche DLLs hat, die ein gemeinsames Interface implementieren.
    Er möchte gern, dass das Programm auch bei Aufruf einer nicht erforderlichen Funktion von Dir nicht abstürzt.
    Also muss die nicht erforderliche Funktion vorhanden sein, es genügt, dass sie vorhanden ist, es muss nix drin stehen.
    Beispiel:
    Ansteuerung von Kameras.
    Du willst alle Kameras ansteuern.
    Eine Kamera kann Filme aufnehmen, die andere nicht.
    Trotzdem muss bei beiden die GetMovie()-Funktion vorhanden sein, die eine gibt einen Film zurück, die andere nix.
    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!
    So, habe es jetz so weit fertig gebaut das interface und auch einige dll schon nur jetzt beim laden gehts wieder nicht weiter da ladet er nur eine dll wenn überhaupt mal will er mal nicht.

    Option Strict is an.
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class Form1
    2. Dim myplugin As IFace.InterfacePlugin
    3. Dim plugins As New List(Of IFace.InterfacePlugin)
    4. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    5. ListBox1.Items.Add(myplugin.Techno4ever(IFace.InterfacePlugin.T4e.main))
    6. ListBox1.Items.Add(myplugin.RauteMusik(IFace.InterfacePlugin.Raute.club))
    7. End Sub
    8. Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    9. loadplugin()
    10. End Sub
    11. Sub loadplugin()
    12. For Each plug As String In Directory.GetFiles(Application.StartupPath, "*.dll")
    13. Dim plugin As IFace.InterfacePlugin = PlugInConnector.LoadPlugIn(plug)
    14. If Not plugin Is Nothing Then
    15. plugins.Add(plugin)
    16. End If
    17. Next
    18. End Sub
    19. End Class
    20. Public Class PlugInConnector
    21. Public Shared Function LoadPlugIn(ByVal strFile As String) As IFace.InterfacePlugin
    22. Dim vPlugIn As IFace.InterfacePlugin
    23. Dim a As System.Reflection.Assembly = System.Reflection.Assembly.LoadFile(strFile)
    24. Dim types() As Type = a.GetTypes
    25. For Each pType As Type In types
    26. vPlugIn = CType(a.CreateInstance(pType.FullName), IFace.InterfacePlugin)
    27. Return vPlugIn
    28. Next
    29. Return Nothing
    30. End Function
    31. End Class
    Du hättest auch einfach die Interfaces aufsplitten können, der Plugin Schreiber implementiert dann halt das für sein Plugin passende, ist ja unnötig alles in eins zu flatschen.


    [VB.NET] Erstellen eines Plugin-Systems mit VB.NET und MEF ab .NET 3.5

    ThuCommix schrieb:

    Du hättest auch einfach die Interfaces aufsplitten können


    und wie meinst du das genau ? mehre interface machen oder wie ?

    EDIT:

    **gelöscht**

    nur eins noch wie bekomme ich auch wirklich dann das richtige item denn ich weis ja eig nicht welches item wo ist die 1 dll kann auch die 3 oder 4 in der liste sein.

    VB.NET-Quellcode

    1. Private PlugIns As New List(Of IFace.InterfacePlugin)
    2. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    3. For Each plug As String In Directory.GetFiles(Application.StartupPath & "\Plugin", "*.dll")
    4. Dim PlugIn As IFace.InterfacePlugin = PlugInConnector.LoadPlugIn(plug)
    5. If Not (PlugIn Is Nothing) Then PlugIns.Add(PlugIn)
    6. Next
    7. End Sub
    8. Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    9. ListBox1.Items.Add(PlugIns.Item(0).RauteMusik(IFace.InterfacePlugin.Raute.club))
    10. ListBox1.Items.Add(PlugIns.Item(1).Techno4ever(IFace.InterfacePlugin.T4e.club))
    11. End Sub
    12. End Class



    Edit by LaMa5:
    - Bitte keine Doppelpost's, es gibt eine 'Bearbeiten' Funktion (Boardregeln §4.1e)
    --> Beiträge zusammengefügt.
    - Beitrag wurde teilweise gelöscht um weitere Diskussionen zu vermeiden.

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

    Du kannst natürlich mehrere Interfaes machen und Deine DLL-Klasse von einer oder mehreren dieser Interfaces ableiten (das würde ich nicht unbedingt präferieren).
    Eine Sorte DLL - ein Interface (z.B. Kameras).
    Eine andere Sorte DLL - ein anderes Interface (z.B. Messsysteme).
    Natürlich können beide Interfaces ein gemeinsames Basisinterface haben (z.B. USB-Kommunikation).
    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!
    die dll sorte ist immer die selbe. ich nutze in jeder dll nur eine funktion das ich den code aufteilen kann und später leichter verändern kann ohne das hq prog zuverändern.
    nur wie stelle ich das nun an das nutzten von mehren dll mit einen interface ? wie in der oberen post macht mir das laden und dann das verwenden der dll probleme.

    Darkronight schrieb:

    ich nutze in jeder dll nur eine funktion
    Irgendwie verstehe ich Deinen Plan nicht.
    Was hat esw für einen Zweck, pro DLL nur eine Funktion zu veröffentlichen?
    Es sei denn, die Funktion heißt z.B.
    BerechneMirDieSteuerFür2012(), aber auch solch würde ich zerlegen.
    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!
    Anders rum mal was bringt mir ein plugin sys mit einer dll wo alle funktionen drin sind ?
    Mein plan ist so das in der dll eine funktion drin ist die etwas auslesen tuht aus dem inet und das für verschiedne seiten. und darum will ich in der dll nur die funktion haben die für eine bestimmte seite ist und in den anderen die anderen funktonen halt. sonst macht für mich ein plugin sys überhaupt keinen sinn wenn man alles in eine reinhauen tuht.

    Darkronight schrieb:

    Anders rum mal was bringt mir ein plugin sys mit einer dll wo alle funktionen drin sind ?
    Die eine DLL mit allen Funktionen unterstützt Kamkera X, die nächste DLL mit allen Funktionen unterstützt Kamera Y, die nächste DLL mit allen Funktionen unterstützt Kamera Z.
    So hast Du einje Software, die mehrere / viele Kameratypen unterstützt.
    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!

    RodFromGermany schrieb:

    Die eine DLL mit allen Funktionen unterstützt Kamkera X, die nächste DLL mit allen Funktionen unterstützt Kamera Y, die nächste DLL mit allen Funktionen unterstützt Kamera Z.
    So hast Du einje Software, die mehrere / viele Kameratypen unterstützt.


    wenn ich das so richtig verstehe ist es eine dll nur für mehre prog oder nicht ?

    Darkronight schrieb:

    wenn ich das so richtig verstehe ist es eine dll nur für mehre prog oder nicht ?
    :?:
    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!