【问题标题】:Calling method in Singleton instance from Hangfire backgroundjob C# Web Mvc从 Hangfire backgroundjob C# Web Mvc 调用 Singleton 实例中的方法
【发布时间】: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


    【解决方案1】:

    我知道这似乎有很多额外的麻烦,但您可能应该考虑使用 IoC 容器来管理 MyApplicationContext 的生命周期,然后挂钩 - 请参阅 information on using IoC Containers with hangfire

    在推送中,您可以实现自己的 JobActivator 类(同样,说明在 IoC Docs 中),但我强烈建议先调查 IoC 容器路由。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多