假设我有一个连接到数据库的应用程序,它有自己的表单,可以显示数据并允许更改数据。进入后,如何将程序扩展为可由第三方扩展?
例如,第三方将能够编写用户可以运行的脚本,以提示用户输入。然后,脚本的一部分将采用用户输入的内容(整数/字符串/布尔值)并对其执行一些基本的编程操作,对整数值进行数学运算,对字符串值进行连接(以及其他字符串函数),以及触发更多用户的逻辑测试提示等等,脚本环境也支持读/写应用程序的数据库。
这是通过让程序可以运行的文本文件来完成的,每行对应一个特定的命令吗?然后应用程序将读取每一行,找出该行代表的命令,并将其等同于C#代码?这个问题是否已有解决方案?
答案 0 :(得分:2)
问题相当开放,这里有一些经过验证的很棒的扩展工具:
已编译使用C#编写的插件将使用Managed Extensibility Framework (MEF),这是一个设计精良的扩展性选项。
脚本当Roselyn准备就绪时,C#中的扩展可能会很快。
通过将Jurassic集成到您的应用程序中,也可以完成脚本编写。
答案 1 :(得分:2)
如果您想将脚本语言嵌入到c#app中,有几个不错的选择。 IronPython,IronScheme和IronRuby alL支持动态语言运行时,因此他们可以从主机代码访问对象。还有Boo,它是一种强类型的CLR语言,看起来很像Python,但可以很容易地嵌入到C#应用程序中,和其他人一样,可以与宿主应用程序进行交互。一般来说,嵌入过程非常简单 - Michael Foord's IronPython site has a good example。
还有NLua应该是一个CLR友好的lua包装器,但我对那个没有个人知识。
在上述所有内容中,我认为推动您选择的主要因素将是用户群的偏好。特别是对于您所描述的轻量级应用程序,所有这些选择应该非常适合。如果你希望用户能够自己进行大量的编程,那就更复杂了,因为这些语言的CLR端口通常不支持与基于C的对应的相同的二进制扩展 - 例如,IronPython不能使用常规的Perforce API模块,因为它建立在基于C的二进制扩展模块上。但是,所有Iron *语言都可以使用与C#相同的基类库 - 您可以将System.Windows.Forms导入其中任何一个以创建GUI等。