Masz kilka opcji. Najprostszym moim zdaniem jest stworzenie ogólnego interfejsu, takiego jak IPlugin
. Zaimplementuj to w swoim zdalnym zgromadzeniu i pozwól, aby aplikacja to sprawdzała.
IPluginManager manager = this; // let this class implement IPluginManager
Assembly assembly = Assembly.LoadFile(downloadedFilePath);
foreach (Type type in assembly.GetTypes())
{
foreach (Type interfaceType in type.FindInterfaces
(delegate(Type m, object filterCriteria)
{
return m.FullName == typeof(IPlugin).FullName;
}
, null
)
)
{
IPlugin plugin = (IPlugin)Activator.CreateInstance(interfaceType);
plugin.Activate(manager);
}
}
Kod dla IPlugin
i IPluginManager
:
public interface IPluginManager
{
void Foo();
}
public interface IPlugin
{
void Activate(IPluginManager manager);
}
Ten kod ładuje pobranego montaż zapisany w pliku na downloadedFilePath
. Następnie znajduje klasy implementujące IPlugin
i ładuje je.
Od tego momentu wszystko jest twoje. Możesz wydać oba interfejsy, aby dodać funkcjonalność wtyczek i aplikacji. Klasa implementująca IPluginManager
obsługuje całą komunikację zi do wtyczek.
Jeśli nie podoba toczenia własne, można użyć MEF (the Managed Extensibility Framework).
Integracja z istniejącym oprogramowaniem. Mam idee, ale nie wiem jak to zrobić –