У меня есть C# приложение, которое загружает dll подключаемых модулей и запускает их. Все плагины наследуются от класса BasePlugin
. Мое приложение создает плагины как BasePlugin
и работает с ними. Например, получить имя плагина, функции вызова и прочее. Существует интерфейс, который плагин может вызывать API из моего приложения и взаимодействовать с моим приложением.
Мой BasePlugin
класс:
public abstract class BasePlugin{
public abstract string Name {get;}
public abstract int A {get;set;}
public abstract void Do(IAPI api);
}
IAPI
Интерфейс:
public interface IAPI
{
void F1();
int F2(int a);
}
Я поместил IAPI
и BasePlugin
в проект библиотеки net, и мое приложение и все плагины используют эту библиотеку. В моем проекте получить каталог плагинов и загрузить плагин с помощью этого кода:
public List<BasePlugin> GetAllPlugins(string dir)
{
List<BasePlugin> plugins = new List<BasePlugin>();
foreach (string dll in Directory.GetFiles(dir, "*.dll"))
{
Assembly loadedAssembly = Assembly.LoadFrom(dll);
List<Type> types = loadedAssembly.GetTypes().Where(t => t.IsSubclassOf(typeof(BasePlugin))).ToList();
foreach (Type t in types)
{
plugins.Add((BasePlugin)Activator.CreateInstance(t));
}
}
return plugins;
}
Я легко разрабатываю C# плагин. Но как я могу разработать плагин C ++, Python, Java, matlab, ... для моего приложения?