如何解决hangfire中只能在后台调用公共方法?

时间:2019-01-30 09:27:21

标签: c# hangfire

我在class的{​​{1}}中有方法。当我将其添加到hangfire时,出现编译器错误

  

仅公共方法可以在后台调用。确保你的   方法具有public访问修饰符,并且您没有使用显式   接口实现。”

public

1 个答案:

答案 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
           );
}