有时候,业务规则相对比较灵活多变,如果可以使用脚本对这样的规则进行处理,运行时动态调用则会增加一些程序的灵活性。IronPython给了我们这样的能力。下面的例子可以动态执行一个叫做foo.py的python程序,并且程序可以改变传入的.net对象(作为输出结果)
1
using
System;
2
using
IronPython.Hosting;
3
4
namespace
IronPythonHostingDemo
5
{
6
class
ClassA
7
{
8
private
int
value;
9
10
public
ClassA()
11
{
12
this
.value
=
1
;
13
}
14
15
public
int
Value
16
{
17
get
{
return
value; }
18
set
{
this
.value
=
value; }
19
}
20
}
21
22
class
DemoProgram
23
{
24
static
void
ProcessByPython(ClassA a)
25
{
26
PythonEngine engine
=
new
PythonEngine();
27
EngineModule em
=
engine.CreateModule(
"
foo
"
,
false
);
28
29
em.Globals[
"
objectA
"
]
=
a;
30
31
engine.ExecuteFile(
"
foo.py
"
, em);
32
}
33
34
static
void
Main(
string
[] args)
35
{
36
try
37
{
38
ClassA a
=
new
ClassA();
39
ProcessByPython(a);
40
Console.WriteLine(
"
a.value =
"
+
a.Value);
41
}
42
catch
(Exception e)
43
{
44
Console.WriteLine(e);
45
}
46
}
47
}
48
}
49
对应的foo.py如下:
1
def
foo(a):
2
a.Value
=
a.Value
*
2
3
4
foo(objectA)
程序都很简单,我就不多废话了。