Может тебе это и поможет
)
Создаешь сервер + в каком-нибудь каталоге сервера накидываешь DLL-ки, каждая из которых представляет собой сборку для одного из меняемых тобой объектов.
Далее (так это сделано у меня):
- Код: Выделить всё
Module PluginModule
Private Structure PluginsMethods
Dim tmp As System.Reflection.MethodInfo
End Structure
Private Structure PluginsStruct
Dim AssemblyName As String
Dim BaseType As Type
Dim BaseObject As Object
Dim PluginStruct As PluginShared.MainDefenitions.PluginInfoStruct
Dim Methods As PluginsMethods
End Structure
Private PlugCollection As New Collection
Public Sub InitPlugins()
' Итак, самая важная часть - загрузка модулей.
' Зарядим цикл по всей директории Plugins
If Not System.IO.Directory.Exists(PathToApp + "Plugins") Then
SaveToLog("Не найдена директория плагинов. Создание...", LogSubSystem.LogLevels.Notice)
System.IO.Directory.CreateDirectory(PathToApp + "Plugins")
End If
Dim PluginsMassive() As String
PluginsMassive = System.IO.Directory.GetFiles(PathToApp + "Plugins", "*.dll")
Dim i As Long
' По всем плагинам!
Dim mAssembly As System.Reflection.Assembly
Dim mFlags As System.Reflection.BindingFlags = System.Reflection.BindingFlags.DeclaredOnly Or System.Reflection.BindingFlags.Public Or System.Reflection.BindingFlags.NonPublic Or System.Reflection.BindingFlags.Instance
Dim tmp As PluginsStruct
Dim tmpMethod As System.Reflection.MethodInfo
Dim ModuleInited As Boolean
For i = 0 To PluginsMassive.GetUpperBound(0)
Console.writeline("Загрузка модуля " + System.IO.Path.GetFileNameWithoutExtension(PluginsMassive(i)))
mAssembly = System.Reflection.Assembly.LoadFrom(PluginsMassive(i))
tmp.AssemblyName = mAssembly.GetName.Name
tmp.BaseType = mAssembly.GetType(tmp.AssemblyName + ".PluginMain")
ModuleInited = True
' Попробуем синициализировать модуль. Если не выйдет - это не наш модуль!
Try
tmpMethod = tmp.BaseType.GetMethod("InitModule")
Catch ex As Exception
ModuleInited = False
End Try
If ModuleInited Then
' Если модуль синициализирован, то
' 1. Получим информацию по модулю
tmp.BaseObject = tmp.BaseType.InvokeMember(Nothing, mFlags Or System.Reflection.BindingFlags.CreateInstance, Nothing, Nothing, Nothing)
tmp.PluginStruct = tmpMethod.Invoke(tmp.BaseObject, Nothing)
Console.writeline("Инициализация модуля " + tmp.PluginStruct.PluginLongName)
' 2. Проинициализируем модуль
tmpMethod = tmp.BaseType.GetMethod("KakoyNibudObschiyMetod")
tmpMethod.Invoke(tmp.BaseObject, Nothing)
' 3. Добавим обработку событий
AddHandler tmp.BaseObject.TestEvent, AddressOf EventRaised
PlugCollection.Add(tmp)
End If
Next
End Sub
Private Sub EventRaised()
End Sub
End Module
Этот код создает коллекцию ДЛЛ-ок с событием TestEvent, каждую инициализирует методом KakoyNibudObschiyMetod, проверяет его при помощи метода InitModule.
Вроде все. Если чего-то непонятно - объясню