脚本化.NET对象

Cap*_*mic 5 .net c# scripting parsing

我有一个简单的.NET应用程序,它作为Windows服务运行.说它有一个类

MyClass
{
  Run(Destination d)
  Walk(Destination d)
  Wash(Dishes d)
}
Run Code Online (Sandbox Code Playgroud)

我想创建一个控制台应用程序,我会在其中键入简单的人类可读命令

run left
walk right
Run Code Online (Sandbox Code Playgroud)

就像你在Windows控制台中一样.我想知道实现这种映射的最佳方法是什么.直接的方法当然是创建自己的字符串解析器,其中包含许多switch语句,但我认为如果有更好更快的方法.

axe*_*l_c 3

这可能超出了您的需求,但我认为一种强大、灵活的方法是创建几个元数据属性来装饰您可能想要从 shell 调用的类,例如:

[ScriptableClass]
public class MyClass
{
     [ScriptableMethod(typeof (Destination),typeof(int))]
     public void Run (Destination f, int distance) {}
}
Run Code Online (Sandbox Code Playgroud)

然后,在 shell 启动期间,通过反射加载程序集并查找标有ScriptableClass属性的类型。对于它们中的每一个,您检查它们的公共方法,查找那些标记有ScriptableMethod属性的方法,并且您可以构建类及其可脚本化方法的字典(以及有关参数的信息)。对于前面的示例,您将有一个可以从 shell 执行的“MyClass.Run”命令。收到后,您的脚本引擎将创建/查找该类的实例并执行该方法。

此方法的优点是您不必在每次添加新类或修改方法时都修改脚本引擎。