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