.NET を使用してプラグイン システムを作成しようとしていますが、それが正しく行われているかどうかわかりません。システムの基本は、特定のディレクトリ ({apppath}/Plugins/) にプリコンパイル済みの DLL が多数あることです。特定の基本クラスを継承している場合は、リフレクションを使用してそれぞれを調べ、利用可能なすべてのクラスを調べたいと考えています。 (これはさらに別の DLL で定義されていますが、後で説明します)、そのインスタンスを作成し、そのインスタンスで特定の関数を呼び出します。
Public Sub ScanPluginsInDirectory(ByVal Directory As String)
Dim Plugins As New IO.DirectoryInfo(Directory)
Dim Files As IO.FileInfo() = Plugins.GetFiles("*.dll")
Dim CryptType As Type = GetType(CryptPluginBase)
Dim PluginsData as List(Of LoadedPluginsInfo)
For Each DllFile As IO.FileInfo In Files
Try
Dim thisAsm As Assembly = Assembly.LoadFrom(DllFile.FullName)
Dim ClassDefs = thisAsm.GetTypes().Where(Function(type) CryptType.IsAssignableFrom(type))
For Each ClassDef As Type In ClassDefs
Dim A As Object
A = ClassDef.Assembly.CreateInstance(ClassDef.Name)
PluginsData.Add(New LoadedPluginsInfo(A.Plugin(), False))
Next
Catch ex As Exception
Continue For
End Try
Next
End Sub
私が抱えている特定の問題は、これが正しい方法かどうかわからないということです。A.Plugin()
実際に存在し、ここで参照されている構造とクラスにバグがないと仮定できる場合、私がやろうとしている方法は機能しますか? 誰かが助けるためにさらにコードが必要な場合は、投稿できます。