在.NET中嵌入IronPython 交互

  随着IronPyhon 2.0 的发布,.NET Dynamic Language Runtime 也更加成熟了,在2.0中我们可以用动态脚本以粘合剂的方式编写架构体系中的各种逻辑单元,既便于修改,又能灵活适合多变的业务场景。当然,我的目标是在 Platform Framework 中能嵌入脚本引擎,而不是用 ipy.exe 去执行一个“独立”的任务。要让.NET 项目能真正跟脚本进行交互,还得需要提供脚本引擎的实现。这得提到DLR一些基本概念了。

  下图摘自 DLR 帮助文件,通过它我们基本可以了解基于 DLR 的组成方式。

 

      下图描述了 DLR 的基本执行流程。

 

  ScriptRuntime:创建 DLR 运行环境,这是整个执行过程的起始点,它表示一个全局的执行状态(比如程序集引用等等)。每个应用程序域(AppDomain)中可以启动多个 ScriptRuntime。

  ScriptScope:构建一个执行上下文,其中保存了环境及全局变量。宿主(Host)可以通过创建不同的 ScriptScope 来提供多个数据隔离的执行上下文。

  ScriptEngine: DLR 动态语言(比如 IronPython)执行类,可于解析和执行动态语言代码。

  ScriptSource:操控动态语言代码的类型,我们可以编译(Compile)、读取(Read Code Lines)或运行(Execute)代码。

  CompiledCode:调用 ScriptSource.Compile()将源代码编译成 CompiledCode,这样多次执行就无需重复编译,从而提高执行性能。

  ObjectOperations:提供了相关方法,允许我们在宿主(Host)中操作 DLR 对象成员(Member)。

  现在我们来构建脚本引擎

  当然我们必须加入IronPyhton提供的相关引用并导入命名空间

  using IronPython.Hosting;

  using IronPython.Compiler;

  using IronPython.Runtime;

  using Microsoft.Scripting;

  using System.Runtime.Remoting;

  1、Hello World

  以下为引用的内容:

      var py = @"def test():
  return ‘hello world~!’;
  print test();
"var engine = Python.CreateEngine();
  var code
= engine.CreateScriptSourceFromString(py, SourceCodeKind.Statements);
  code.Execute();

NET技术在.NET中嵌入IronPython 交互,转载需保留来源!

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。