Я разрабатываю приложение, написанное на C #, на котором размещается IronPython. Я планирую, что пользователи будут писать скрипты на Python, которые содержат классы, реализующие предопределенный интерфейс.
Что-то вроде:
Определение интерфейса в коде C #:
public interface IPlugin
{
void DoSomething();
}
Реализация интерфейса в коде Python.
class Plugin(IPlugin):
def DoSomething():
print "Doing stuff."
В моем приложении я загружаю скрипт python и выполняю методы, реализованные классами в этих скриптах.
Я хочу знать: как мне получить дескриптор всех классов, которые реализуют указанный интерфейс в скрипте python?
Например: если бы я делал все это в C #, у меня было бы желание помочь мне, и я мог бы просто загрузить сборку и сделать что-то вроде:
Assembly assembly = Assembly.LoadFrom("plugin.dll");
Type[] types = assembly.GetTypes();
foreach(Type type in types)
{
foreach(Type interfaceType in type.GetInterface())
{
if(interfaceType == typeof(IPlugin))
{
// gotcha, invoke interface specific methods
}
}
}
Как мне сделать то же самое, когда вместо сборки я имею дело со скриптом IronPython? Я знаю, что используя ObjectOperations и ScriptScope, я могу получить дескриптор класса, если знаю его имя - , как описано здесь - но я ищу что-то более надежное.