C# 如何解决在hangfire中只能在后台调用公共方法的问题?

C# 如何解决在hangfire中只能在后台调用公共方法的问题?,c#,hangfire,C#,Hangfire,我在class中有一个方法,它是public。当我将它添加到hangfire时,我得到了编译器错误 只能在后台调用公共方法。确保你的 方法具有publicaccess修饰符,并且您没有使用显式 接口实现。” 公共类作业服务 { public void TestJob2(参数) { } } 公共类作业控制器:控制器数据库 { 私有只读作业服务(U作业服务); 公共作业控制员(作业服务作业服务) { _作业服务=作业服务; } public IActionResult AddOrUpdate([Fr

我在
class
中有一个方法,它是
public
。当我将它添加到hangfire时,我得到了编译器错误

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

公共类作业服务
{
public void TestJob2(参数)
{
}
}
公共类作业控制器:控制器数据库
{
私有只读作业服务(U作业服务);
公共作业控制员(作业服务作业服务)
{
_作业服务=作业服务;
}
public IActionResult AddOrUpdate([FromQuery]string recurringJobId=”“,[FromQuery]string methodName=“,[FromQuery]bool remove=false,[FromQuery]string cronExpression=“*/1****”,[FromBody]Parameters=null)
{
Expression=ToExpression(()=>{string t=(string)method.Invoke(_-jobservice,new-object[]{parameters});});
AddOrUpdate(recurringJobId,expression,cronExpression);
}
}

lambda及其参数需要通过Hangfire进行序列化。首先,它的主体必须是一个简单的调用,例如,没有方法赋值

执行作业的
jobservice
实例不能是控制器引用的实例。我假设您已经为依赖项注入设置了Hangfire,或者可以在不需要任何依赖项的情况下实例化
jobservice

您需要向
jobservice
类添加一个方法:

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
           );
}
public IActionResult AddOrUpdate([FromQuery]string recurringJobId=”“,[FromQuery]string methodName=“,[FromQuery]bool remove=false,[FromQuery]string cronExpression=“*/1****”,[FromBody]Parameters=null)
{
RecurringJob.AddOrUpdate(
复发的Jobid,
js=>js.InvokeMethod(方法名、参数),
()=>cronExpression
);
}

你的
公共的
,但是你的
方法
呢?它也是公共的吗?在hangfire中,只有带有
公共访问修饰符的方法才能被调度。我的方法是public void testjob2您应该根据此官方示例调用您的方法:
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
           );
}