我计划在以下用例中使用IronPython和c#。
我想公开一些可以通过python脚本调用的函数。
这样的脚本将被c#应用程序调用。
例如,可以在c# ClearUserInput()中准备函数来清除WPF上的一些数据。然后我可以通过一些接口暴露更多的函数。
public interface IScriptContract
{
void ClearMainWindow();
void LoadProject(string projectName);
}
python脚本:print "clearing window"
ClearMainWindow() --how to cooperating with C# code?
print "load proj"
ClearMainWindow("project.proj") --how to cooperating with C# code?
我希望用户可以写一些脚本,可以调用我的。net函数。
这可能吗?
这样做的标准方法是创建一个'host对象',它被传递到脚本中,提供对主机应用程序的访问(如果你熟悉web编程,那就是window
实例)。
在IronPython中,你可以在执行代码的ScriptScope
对象上使用SetVariable
:
var contract = new ScriptContract();
var engine = Python.CreateEngine();
var mainScope = engine.CreateScope();
var scriptSource = engine.CreateScriptSourceFromFile("test.py", Encoding.Default, SourceCodeKind.File)
mainScope.SetVariable("host", contract);
scriptSource.Execute(scope);
从python,它总是可用的:
host.ClearMainWindow()