Я разрабатываю приложение, написанное на C#, на котором размещается IronPython. Я планирую, что пользователи будут писать сценарии python, которые содержат классы, реализующие предопределенный интерфейс.Запрос скриптов IronPython для интерфейсов в размещенной среде
Что-то вроде:
Определение интерфейса в C# код:
public interface IPlugin
{
void DoSomething();
}
Реализовать интерфейс в питона кода.
class Plugin(IPlugin):
def DoSomething():
print "Doing stuff."
В моем приложении, я загрузить сценарий питона и выполнить методы, реализованные с помощью классов в этих сценариях.
Я хочу знать: как мне получить дескриптор всех классов, реализующих указанный интерфейс в скрипте 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, я могу получить дескриптор класса, если знаю его имя - as described here - но я ищу что-то более надежное.
Согласовано, за исключением того, что Рохит можете использовать интерфейс, чтобы различать между классами, которые он хочет, чтобы позвонить и вспомогательные классы. – Greg
Да, Грег говорил мне. – Rohit
Но он хочет использовать этот объект Python * from * статически типизированный язык, где он * делает *, чтобы иметь возможность различать по типу. – fuzzyman