Я пытаюсь собрать систему плагинов с .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()
действительно существует, а все упомянутые здесь структуры и классы не содержат ошибок? Если кому-то понадобится больше кода, чтобы помочь, я могу опубликовать его.