gpt4 book ai didi

c# - 使用 .NET Core 进行 Hangfire 依赖注入(inject)

转载 作者:行者123 更新时间:2023-12-02 09:29:43 27 4
gpt4 key购买 nike

如何在 Hangfire 中使用 .NET Core 的默认依赖注入(inject)?

我是 Hangfire 新手,正在寻找适用于 ASP.NET Core 的示例。

最佳答案

请参阅 GitHub 上的完整示例 https://github.com/gonzigonz/HangfireCore-Example .
现场直播 http://hangfirecore.azurewebsites.net/

  1. 确保您拥有 Hangfire 的核心版本:
    dotnet添加包Hangfire.AspNetCore

  2. 通过定义 JobActivator 来配置您的 IoC。以下是与默认 asp.net core 容器服务一起使用的配置:

    public class HangfireActivator : Hangfire.JobActivator
    {
    private readonly IServiceProvider _serviceProvider;

    public HangfireActivator(IServiceProvider serviceProvider)
    {
    _serviceProvider = serviceProvider;
    }

    public override object ActivateJob(Type type)
    {
    return _serviceProvider.GetService(type);
    }
    }
  3. 接下来在 Startup.ConfigureServices 方法中将hangfire注册为服务:

    services.AddHangfire(opt => 
    opt.UseSqlServerStorage("Your Hangfire Connection string"));
  4. Startup.Configure 方法中配置hangfire。关于您的问题,关键是将hangfire配置为使用我们刚刚在上面定义的新HangfireActivator。为此,您必须向 IServiceProvider 提供hangfire,只需将其添加到 Configure 方法的参数列表中即可实现这一点。在运行时,DI会为你提供这个服务:

    public void Configure(
    IApplicationBuilder app,
    IHostingEnvironment env,
    ILoggerFactory loggerFactory,
    IServiceProvider serviceProvider)
    {
    ...

    // Configure hangfire to use the new JobActivator we defined.
    GlobalConfiguration.Configuration
    .UseActivator(new HangfireActivator(serviceProvider));

    // The rest of the hangfire config as usual.
    app.UseHangfireServer();
    app.UseHangfireDashboard();
    }
  5. 当您对作业进行排队时,请使用通常是您的接口(interface)的注册类型。除非您以这种方式注册,否则不要使用具体类型。您必须使用在 IoC 中注册的类型,否则 Hangfire 将找不到它。例如假设您已注册以下服务:

    services.AddScoped<DbManager>();
    services.AddScoped<IMyService, MyService>();

然后您可以使用该类的实例化版本将 DbManager 排入队列:

    BackgroundJob.Enqueue(() => dbManager.DoSomething());

但是您无法对 MyService 执行相同的操作。使用实例化版本进行排队将失败,因为 DI 将失败,因为仅注册了接口(interface)。在这种情况下,您将像这样排队:

    BackgroundJob.Enqueue<IMyService>( ms => ms.DoSomething());

关于c# - 使用 .NET Core 进行 Hangfire 依赖注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41829993/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com