【发布时间】:2023-03-12 16:39:01
【问题描述】:
正如标题所说,我正在尝试从 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()at Hangfire.Storage.InvocationData.Deserialize()
我怎样才能让它工作?
http://docs.hangfire.io/en/latest/background-methods/passing-dependencies.html
【问题讨论】:
标签: c# asp.net-mvc visual-studio singleton hangfire