如何开始为我的.NET应用程序设计和实现脚本界面?
有VSTA(的.NET等同VBA于COM),但据我了解,我将不得不支付许可费,我的应用程序的每个安装.它是一个开源的应用程序,所以这将无法正常工作.
还有例如嵌入式解释器(IronPython?),但我不明白这将如何允许将"对象模型"(见下文)暴露给外部(或内部)脚本.
子问题:
背景:
我曾经为Macintosh应用程序设计并实现了一个相当复杂的脚本接口,用于从质谱仪(Mac OS,System 7)获取和分析数据,后来用于Windows应用程序的COM接口.
两者都设计有"对象模型"和类(可以具有属性).这些是重载的单词,但在脚本界面中,上下文对象模型本质上是特定类对象的包含层次结构.类具有属性,包含对象的列表,不仅是数据,还可以包含动词(动作/方法).例如,在Macintosh情况下,定义的应用程序对象可以包含一个采集对象,该对象具有仪器中使用的电压和fireLater动词的属性- 所有这些都可以从外部脚本中看到.
请注意,在这两种情况下,用于实现应用程序的编程语言中的类/对象与脚本对象模型无关.对于Macintosh的情况,用于实现脚本接口的机制由Apple定义.Apple还定义了一些如何设计对象模型的标准.例如,类中某些常见属性的标准化名称.
或者类似于在Microsoft Office应用程序中公开的COM接口,其中应用程序对象可用于添加到其文档列表(具有创建文档的GUI表示的副作用).
外部脚本可以在容器中创建新对象,并在任何给定时间浏览层次结构的内容.在Macintosh中,案例脚本可以用例如AppleScript或Frontier编写.
在Macintosh上,脚本接口的实现非常复杂.在Metroworks的C++类库中支持它(这个名字现在让我失望)使它变得更加简单.
我想在我的.NET项目中使用IronRuby作为脚本语言(例如Lua).例如,我希望能够从Ruby脚本订阅特定事件,在宿主应用程序中触发,并从中调用Ruby方法.
我正在使用此代码来实例化IronRuby引擎:
Dim engine = Ruby.CreateEngine()
Dim source = engine.CreateScriptSourceFromFile("index.rb").Compile()
' Execute it
source.Execute()
Run Code Online (Sandbox Code Playgroud)
假设index.rb包含:
subscribe("ButtonClick", handler)
def handler
puts "Hello there"
end
Run Code Online (Sandbox Code Playgroud)
我如何能: