Я пытаюсь собрать систему плагинов с .NET, и я не уверен, правильно ли я делаю это. Основой системы является то, что определенный каталог ({apppath}/Plugins /) будет иметь кучу предварительно скомпилированных библиотек DLL, и я хочу просмотреть каждый из них с отражением и для каждого доступного класса, если он наследует определенный базовый класс (это определено в еще одной DLL, но я расскажу об этом позже), затем создайте экземпляр и вызовите определенную функцию в указанном экземпляре.Createinstance() - Правильно ли я делаю это?
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()
фактически существует, и любые структуры и классы, на которые делается ссылка здесь, являются ошибками? Если кому-то понадобится больше кода, чтобы помочь, я могу опубликовать его.
Вы имеете в виду inst.Plugin()? – Sukasa
@ Сукаса, да. Я исправил это. – JaredPar
Хорошо, я не был уверен, был ли небольшой трюк, о котором я не знал. Благодаря! – Sukasa