IronPython, доступ к экземпляру класса из скрипта
От: uni Россия  
Дата: 11.06.13 11:14
Оценка:
Доброго, может ли кто привести пример доступа из скрипта к экземпляру класса, из которого выполняется сам скрипт. Нужно изменять в скрипте свойства экземпляра класса для настройки параметров. Хотелось бы что-нить без статических полей, если возможно. Может быть есть какой-то специальный механизм?

Вот так вызываю скрипт в виде строки:

using IronPython.Hosting;
using IronPython.Runtime;
using Microsoft.Scripting;
using Microsoft.Scripting.Hosting;

private void RunScript( XYPlot xyplot ) {

    ScriptEngine engine;
    ScriptRuntime runtime;
    ScriptSource source = null;

    try {

        XYPlot.xyplot = xyplot.canv;

        engine = Python.CreateEngine();
        
        runtime = engine.Runtime;

        runtime.LoadAssembly( System.Reflection.Assembly.GetExecutingAssembly() );

        source = engine.CreateScriptSourceFromString( base.canv.Script, SourceCodeKind.AutoDetect );

        ScriptScope scope = runtime.CreateScope();

        CompiledCode compil = source.Compile();

        // Выполняем скрипт.
        compil.Execute( scope );

    } catch {}

}


XYPlot.xyplot = xyplot.canv; — это использование статического поля, которое будет доступно в скрипте. Делаю по аналогии со статьёй на хабре, где использовалось статическое поле для доступа к экземпляру. Я не спец по python и IronPython и потому хотелось бы посмотреть на примеры использования скриптов для управления свойствами экземпляра класса.
Re: IronPython, доступ к экземпляру класса из скрипта
От: Mihas  
Дата: 11.06.13 11:23
Оценка:
Здравствуйте, uni, Вы писали:

uni>пример доступа из скрипта к экземпляру класса, из которого выполняется сам скрипт.


ScriptScope scope = runtime.CreateScope();
scope.SetVariable("ThisInstance", this)
compil.Execute( scope );

Об этом экземпляре речь?
Re[2]: IronPython, доступ к экземпляру класса из скрипта
От: uni Россия  
Дата: 11.06.13 11:29
Оценка:
Здравствуйте, Mihas, Вы писали:

M>Здравствуйте, uni, Вы писали:


uni>>пример доступа из скрипта к экземпляру класса, из которого выполняется сам скрипт.


M>
M>ScriptScope scope = runtime.CreateScope();
M>scope.SetVariable("ThisInstance", this)
M>compil.Execute( scope );
M>

M>Об этом экземпляре речь?

Да, именно об этом. Надо же, не думал, что это так просто. Попробую, посмотрю что будет. Спасибо.
Re[2]: IronPython, доступ к экземпляру класса из скрипта
От: uni Россия  
Дата: 11.06.13 20:50
Оценка:
Здравствуйте, Mihas, Вы писали:

M>Здравствуйте, uni, Вы писали:


uni>>пример доступа из скрипта к экземпляру класса, из которого выполняется сам скрипт.


M>
M>ScriptScope scope = runtime.CreateScope();
M>scope.SetVariable("ThisInstance", this)
M>compil.Execute( scope );
M>

M>Об этом экземпляре речь?

Работает хорошо, спасибо. Давно нужно было скрипт приделать, осталось теперь как-то поудобнее сборки дополнительные упаковать.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.