C# 需要创建表达式<;行动>;从字符串
Hangfire是一个后台类方法运行程序,它是一个循环作业函数 RecurringJob.AddOrUpdate(表达式<操作>,字符串)是用于将方法添加到队列的方法。第一个参数是操作调用,第二个参数是cron格式的字符串 若我有类和函数名的字符串,我怎么能添加作业呢 正常的非字符串调用示例如下:C# 需要创建表达式<;行动>;从字符串,c#,linq,hangfire,C#,Linq,Hangfire,Hangfire是一个后台类方法运行程序,它是一个循环作业函数 RecurringJob.AddOrUpdate(表达式,字符串)是用于将方法添加到队列的方法。第一个参数是操作调用,第二个参数是cron格式的字符串 若我有类和函数名的字符串,我怎么能添加作业呢 正常的非字符串调用示例如下: RecurringJob.AddOrUpdate(() => new MyClass().MyMethod(), "0 0 * * *"); 我想做点像 string myClassString =
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())的字符串中生成表达式
// ... (same as yours except the last 2 lines)
var myAction = Expression.Lambda<Action>(Expression.Call(Expression.New(myType), myMethod));
RecurringJob.AddOrUpdate(myAction, myCronString);
/。。。(除最后两行外,与您的相同)
var myAction=Expression.Lambda(Expression.Call(Expression.New(myType),myMethod));
RecurringJob.AddOrUpdate(myAction,myCronString);
字符串可能重复到其等价的表达式树问题/答案无法帮助我从字符串返回表达式或表达式,其中操作或函数可以是包含的,也可以是对象实例化(new MyClass())这是hangfire addorupdate方法所必需的。尝试解析并运行操作
就像运行动态代码,这在c#@DLeh中可能是不可能的。您误解了该问题的答案。这是可能的,只是没有内置的,需要做一些额外的工作。对于一些简单的函数,我们可以直接使用。谢谢,我缺少了表达式。new,并通过Lambda调用使其成为表达式。