У вас есть несколько вариантов. Самый легкий, на мой взгляд, - создать общий интерфейс, что-то вроде IPlugin
. Внесите это в свою удаленную сборку, и пусть ваше приложение проверяет ее.
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);
}
}
Код для IPlugin
и IPluginManager
:
public interface IPluginManager
{
void Foo();
}
public interface IPlugin
{
void Activate(IPluginManager manager);
}
Этот код загружает загруженный узел, сохраненный в файле на downloadedFilePath
. Затем он находит классы, реализующие IPlugin
, и загружает их.
Оттуда, это все ваше. Вы можете использовать оба интерфейса для добавления функциональности в плагины и приложение. Класс, реализующий IPluginManager
, обрабатывает все сообщения от и до плагинов.
Если вам не нравится качению свой собственный, вы можете использовать MEF (Managed Extensibility Framework).
Интеграция с существующим программным обеспечением. У меня есть идеал, но я не знаю, как это сделать. –