我正在尝试用.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()
实际存在并且此处引用的任何结构和类都没有错误,那么我尝试使用的方法是否有效?如果有人需要更多代码来提供帮助,我可以发布它。