我在class
的{{1}}中有方法。当我将其添加到hangfire时,出现编译器错误
仅公共方法可以在后台调用。确保你的 方法具有
public
访问修饰符,并且您没有使用显式 接口实现。”
public
答案 0 :(得分:1)
lambda及其参数需要由Hangfire进行序列化。 AFAIK,其主体必须是一个简单的调用,例如,没有方法分配。
执行作业的JobsService
实例不能被您的控制器引用。我假设您已为依赖项注入see "Using IoC containers"设置了Hangfire,或者可以实例化JobsService
而不需要任何依赖项see "Passing dependencies"。
您需要向JobsService
类添加方法:
public void InvokeMethod(string methodName, Parameters parameters)
{
MethodInfo mi = typeof(JobsService).GetMethod(methodName);
string s = (string)mi.Invoke(this, new[] { parameters });
}
然后,您的JobsController
AddOrUpdate
方法将是:
public IActionResult AddOrUpdate([FromQuery]string recurringJobId = "",[FromQuery]string methodName = "", [FromQuery] bool remove = false, [FromQuery] string cronExpression = "*/1 * * * *", [FromBody] Parameters parameters = null)
{
RecurringJob.AddOrUpdate<JobsService>(
recurringJobId,
js => js.InvokeMethod(methodName, parameters),
() => cronExpression
);
}