Rozhodně to není tak složité jak si myslíte. Uvedu co nejjednodušší příklad. První konzolová aplikace (C:\ConsoleApplication1.exe), bude simulovat DLL pluginu:
Module Module1
Sub Main()
End Sub
End Module
Public Interface ITest
Sub DoSomething()
End Interface
<Serializable()> _
Public Class Test
Implements ITest
Public Sub DoSomething() Implements ITest.DoSomething
MsgBox("OK")
End Sub
End Class
Druhá konzolová aplikace (C:\ConsoleApplication2.exe), bude simulovat hostitelskou aplikaci:
Module Module1
Sub Main()
'Vytvoření nové aplikační domény
Dim newDomain = AppDomain.CreateDomain("Nová aplikační doména")
'Načtení instance pluginu do nové aplikační domény
Dim test = DirectCast(newDomain.CreateInstanceFromAndUnwrap("C:\ConsoleApplication1.exe", "ConsoleApplication1.Test"), ITest)
test.DoSomething()
'Uvolnění aplikační domény
newDomain.Unload()
End Sub
End Module
Public Interface ITest
Sub DoSomething()
End Interface
Příklad je zjednodušen, ve skutečnosti by rozhraní bylo v samostatné Assembly, na kterou by měly referenci jak hostitelská aplikace, tak pluginy. Také pokud by se typy v pluginech odvozené od ITest jmenovaly jinak než ConsoleApplication1.Test, bylo by nutné zjistit jejich názvy pomocí Reflection což také není příliš složité.
|