Метод вызова IronPython по имени - PullRequest
1 голос
/ 23 января 2012

Есть ли способ вызвать метод по имени и указать аргументы без использования динамического?(C #)

ОБНОВЛЕНИЕ:

`открытый класс Program {public static void Main (string [] args) {ScriptEngine engine = Python.CreateEngine ();ScriptScope scope = engine.CreateScope ();

        engine.ExecuteFile("script.py", scope);

        dynamic calculator = scope.GetVariable("Calculator");
        dynamic calculatorInstance = engine.Operations.CreateInstance(calculator);
        dynamic result = engine.Operations.InvokeMember(calculatorInstance, "sample");

        Console.ReadKey();
    }
}

`

class Calculator: def sample(self): return 'test'

Прекрасно работает

Ответы [ 2 ]

2 голосов
/ 23 января 2012

Вы можете использовать класс ObjectOperations для выполнения динамических операций, и вы можете получить его экземпляр из ScriptEngine экземпляра:

ScriptEngine engine = ...;
object result = engine.Operations.InvokeMember(o, "foo", 1, 2, "3");
0 голосов
/ 23 января 2012

Open Source Impromptu-Interface (можно найти в nuget) имеет несколько методов для выполнения отражающего вызов для любого динамического объекта, python, ruby, c # и т. Д., Так как он использует dlrкод связывателя c #.

 Impromptu.InvokeMember(o, "foo", 1, 2, "3")

Но в этом случае ответ ДжеффХарди является лучшим, поскольку вы уже работаете с обработчиком сценариев.

...