Hangfire 是一个后台类方法运行器,它的循环作业函数 RecurringJob.AddOrUpdate(Expression< Action >,string) 是用于将方法添加到队列的方法。第一个参数是 Action 调用,第二个参数是 cron 格式的字符串。
如果我有类和函数名的字符串,我怎么能添加工作。
示例正常的非字符串调用将是:
RecurringJob.AddOrUpdate(() => new MyClass().MyMethod(), "0 0 * * *");
我想做类似的事情
string myClassString = GetMyClassFromConfig();//value "MyNamespace.MyClass";
string myMethodString = GetMyMethodFromConfig();//value "MyMethod";
string myCronString = GetMyCronFromConfig();// value "0 0 * * *"
Type myType = Type.GetType(myClassString);
var myMethod = myType.GetMethod(myMethodString);
var myInstance = Expression.Parameter(myType,"instanceName");
RecurringJob.AddOrUpdate(Expression.Call(myInstance,myMethod), myCronString);
但这会在 AddOrUpdate 方法调用上引发错误:
无法创建 System.Linq.Expressions.Expression 类型的实例。类型是接口或抽象类,不能实例化。路径“类型”,第 1 行,位置 8。
我将如何通过字符串定义添加作业,或者如何从允许对象实例化和方法运行(new MyClass().Run()) 的字符串中创建表达式<Action>,如上例所示?