Methoden einer Assembly per Namen aufrufen

    • VB.NET
    • .NET (FX) 4.0

      Methoden einer Assembly per Namen aufrufen

      Hallo Community

      Nachdem schon einige Male die Frage gestellt wurde wie man eine Methode über den Funktionsnamen aufrufen kann, habe ich beschlossen hier zwei Vorschläge zu bringen.

      Ganz bestimmt gibt es mehrere optimierte Möglichkeiten dazu, wie man sowas lösen kann. Ich hab mich hier für die DesignPattern Strategy einerseits und für die Invoke anderseits entschieden. Dazu muss ich erwähnen, dass ich ganz bewusst alles sehr einfach gehalten und alles komplett auseinandergerissen habe, um die einzelnen Schritte verständlicher Darstellen zu können.

      Beim ersten Vorschlag wird man merken, dass die Funktionen/Methoden zu Klassen umgewandelt worden sind. Dies ist nötig, damit das Designpattern überhaupt umgesetzt werden kann.

      Beim zweiten Vorschlag sind die Funktionen/Methoden ganz normal in einer Klasse.

      Am besten einfach mal durch alles durchsteppen.

      VB.NET-Quellcode

      1. Option Strict On
      2. Option Explicit On
      3. Imports FuncName
      4. Public Module modFuncName
      5. Private dicFunction As Dictionary(Of String, context) = Nothing
      6. Public Sub Main()
      7. testFunc()
      8. Console.ReadKey()
      9. End Sub
      10. Private Sub testFunc()
      11. Dim t As New Tools
      12. dicFunction = t.getAllDllFunc()
      13. If (dicFunction IsNot Nothing) AndAlso (dicFunction.Count > 0) Then
      14. For Each s As String In dicFunction.Keys
      15. Dim cont As context = Nothing
      16. If dicFunction.TryGetValue(s, cont) Then
      17. cont.executeFunc()
      18. End If
      19. Next
      20. End If
      21. End Sub
      22. End Module



      VB.NET-Quellcode

      1. Option Strict On
      2. Option Explicit On
      3. Imports FuncName
      4. Imports System.Reflection
      5. Public Module modFuncName
      6. Private dicFunction As Dictionary(Of String, MethodInfo) = Nothing
      7. Public Sub Main()
      8. testFunc()
      9. Console.ReadKey()
      10. End Sub
      11. Private Sub testFunc()
      12. Dim t As New Tools
      13. Dim dt As New DllFunc
      14. dicFunction = t.getAllDllFunc()
      15. If (dicFunction IsNot Nothing) AndAlso (dicFunction.Count > 0) Then
      16. Dim mi As MethodInfo = Nothing
      17. For Each s As String In dicFunction.Keys
      18. If dicFunction.TryGetValue(s, mi) Then
      19. mi.Invoke(dt, Nothing)
      20. End If
      21. Next
      22. End If
      23. End Sub
      24. End Module



      VB.NET-Quellcode

      1. Private Sub testFunc2()
      2. Dim t As New Tools
      3. Dim dt As New DllFunc, dt2 As New DllFunc2 ' gewünsche Assembly-Klassen zuerst instanzieren
      4. Dim tp() As Type = {dt.GetType, dt2.GetType} 'gewünschte Assembly-Klassen einbinden in Type-Array
      5. dicFunction = t.getAllDllFunc(tp)
      6. If (dicFunction IsNot Nothing) AndAlso (dicFunction.Count > 0) Then
      7. Dim res As Object = Nothing 'Zeigt die unterschiedlichen Return
      8. Dim pm() As Object = {3, 5} 'Für die parametrisierten Methoden
      9. Dim mi As MethodInfo = Nothing 'Type für alle gewünschten Funktionen/Methoden
      10. For Each s As String In dicFunction.Keys
      11. If dicFunction.TryGetValue(s, mi) Then
      12. If mi.ReflectedType = tp(0) Then 'Alle Funktionen der DllFunc
      13. mi.Invoke(dt, Nothing)
      14. ElseIf mi.ReflectedType = tp(1) Then 'Alle Funktionen der DllFunc2
      15. If (mi.Name = "func4") OrElse (mi.Name = "func7") Then 'Für die parameterlosen Funktionen
      16. res = mi.Invoke(dt2, Nothing)
      17. Else : res = mi.Invoke(dt2, pm)
      18. End If
      19. End If
      20. End If
      21. Next
      22. End If
      23. End Sub



      Anregungen, Kritik und Verbesserungsvorschläge immer gerne willkommen.

      Freundliche Grüsse

      exc-jdbi
      Dateien
      • FuncName.zip

        (26,88 kB, 144 mal heruntergeladen, zuletzt: )
      • FuncName2.zip

        (25,04 kB, 150 mal heruntergeladen, zuletzt: )
      • FuncName3.zip

        (26,47 kB, 155 mal heruntergeladen, zuletzt: )

      Dieser Beitrag wurde bereits 9 mal editiert, zuletzt von „exc-jdbi“ ()