正如标题所说,我正在尝试从 Hangfire 中的后台作业调用驻留在 Singleton 实例中的方法。我尝试使用下面的代码将作业排入队列,但它们都不起作用:
BackgroundJob.Enqueue<MyApplicatonContext>(x => x.TestString());
BackgroundJob.Enqueue(() => MyApplicatonContext.Instance.TestString());
我的单例类如下所示:
public sealed class MyApplicatonContext
{
// Singleton instance
private readonly static Lazy<MyApplicatonContext> _instance = new Lazy<MyApplicatonContext>(() => new MyApplicatonContext(GlobalHost.ConnectionManager.GetHubContext<MyApplicatonHub>().Clients));
private readonly string _testString = "It works!";
private IHubConnectionContext<dynamic> Clients
{
get;
set;
}
private MyApplicatonContext (IHubConnectionContext<dynamic> clients)
{
Clients = clients;
}
public static MyApplicatonContext Instance
{
get
{
return _instance.Value;
}
}
public string TestString()
{
return _testString;
}
}
Hangfire 然后生成此作业和错误:
using MyApplicaton.Context;
MyApplicatonContext context = Activate<MyApplicatonContext>();
context.TestString();
System.InvalidOperationException
该类型
MyApplicaton.Context.MyApplicatonContext
不包含带有签名的方法TestString()
System.InvalidOperationException:该类型
MyApplicaton.Context.MyApplicatonContext
不包含TestString()
在 Hangfire.Storage.InvocationData.Deserialize()签名的方法
我怎样才能让它工作?
http://docs.hangfire.io/en/latest/background-methods/passing-dependencies.html