vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Schützen Sie Ihre Software vor Software-Piraterie - mit sevLock 1.0 DLL!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
Re: Plugins und Interfaces 
Autor: Maas
Datum: 04.07.09 15:26

PluginTest:
Imports Plugin
Imports System.Reflection
 
Class Window1
    Private mLabel1Plugins As New List(Of ILabel1)
    Private mLabel2Plugins As New List(Of ILabel2)
    Private mPlugins As New List(Of IPlugin)
 
    Public Sub New()
        InitializeComponent()
        Dim dir As New IO.DirectoryInfo(IO.Path.Combine( _
          My.Application.Info.DirectoryPath, "Plugins"))
        If Not dir.Exists Then dir.Create()
        For Each fi As IO.FileInfo In dir.GetFiles("*.dll")
            If fi.Name <> "Plugin.dll" Then
                Dim asm As Assembly = Assembly.LoadFrom(fi.FullName)
                Dim types() As Type = asm.GetTypes
                For Each t As Type In types
                    Try
                        Dim plugIn As ILabel1 = CType(asm.CreateInstance( _
                          t.FullName), ILabel1)
                        plugIn.Lbl1 = Me.Label1
                        mLabel1Plugins.Add(plugIn)
                        mPlugins.Add(plugIn)
                        AddMenu(plugIn)
                    Catch ex As Exception
                    End Try
                    Try
                        Dim plugIn As ILabel2 = CType(asm.CreateInstance( _
                          t.FullName), ILabel2)
                        plugIn.Lbl2 = Me.Label2
                        mLabel2Plugins.Add(plugIn)
                        mPlugins.Add(plugIn)
                        AddMenu(plugIn)
                    Catch ex As Exception
                    End Try
                Next
            End If
        Next
    End Sub
 
    Private Sub AddMenu(ByVal plg As IPlugin)
        Dim mnu As New MenuItem
        mnu.Header = plg.PluginName
        mnu.IsCheckable = True
        mnu.IsChecked = False
        AddHandler mnu.Click, AddressOf mnuPlugin_Clicked
        mnuPlugins.Items.Add(mnu)
    End Sub
 
    Private Sub mnuPlugin_Clicked(ByVal sender As Object, ByVal e As _
      RoutedEventArgs)
        Dim mnu As MenuItem = CType(sender, MenuItem)
        For Each plg As IPlugin In mPlugins
            If plg.PluginName = mnu.Header Then
                If plg.IsLoaded Then : plg.Unload()
                Else : plg.Load()
                End If
                mnu.IsChecked = plg.IsLoaded
                Exit For
            End If
        Next
    End Sub
End Class
1) Ganz allgemein halte ich es für suboptimal die Plugins per Try-Catch "auszutesten". Gibt es da eine bessere Lösung? Wie kann ich herausfinden ob eine Klasse ein bestimmtes Interface implementiert?

2) Die Frage mit der Implementierung stellt sich nochmal, da ich gerne wüsste wie man bei Klassen erkennen kann, ob diese mehrere Interfaces implementieren (z.B. ILabel1Plg und ILabel2Plg). Die Klasse zu erstellen und zu laden ist nicht wirklich das Problem, nur wird diese dann einmal als ILabel1Plg und ein zweites mal als ILabel2Plg in die Listen geladen, da sie in beide passt.

Danke im Voraus

Maas
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Plugins und Interfaces1.045Maas04.07.09 15:25
Re: Plugins und Interfaces709Maas04.07.09 15:26
Re: Plugins und Interfaces609ModeratorRalf Ehlert04.07.09 16:16
Re: Plugins und Interfaces614Maas04.07.09 18:37

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel