如何解决我的 ASP.NET Core 托管服务不工作的问题?

问题描述 投票:0回答:1

尝试将托管服务添加到应用程序时出现问题

我正在尝试将托管服务添加到我的应用程序中,但它似乎根本不起作用(在调试中没有调用它的任何方法)。 这是托管服务的代码:

using Data.Data;

namespace Shop.HostedServices;

public sealed class ChangeOrderStatusHostedService : IHostedService, IDisposable
{
    private ApplicationDbContext? _db;
    private readonly IServiceScopeFactory _serviceScopeFactory;
    private Timer? _timer;

    public ChangeOrderStatusHostedService(IServiceScopeFactory serviceScopeFactory)
    {
        _serviceScopeFactory = serviceScopeFactory;
    }

    public Task StartAsync(CancellationToken stoppingToken)
    {
        _timer = new Timer(DoWork,
            null,
            TimeSpan.Zero,
            TimeSpan.FromSeconds(5));

        return Task.CompletedTask;
    }
    
    private void DoWork(object? state)
    {
        using var scope = _serviceScopeFactory.CreateScope();
        _db = scope.ServiceProvider.GetRequiredService<ApplicationDbContext>();
            
        // not important code

        _db.SaveChanges();
    }
    
    public Task StopAsync(CancellationToken stoppingToken)
    {
        _timer?.Change(Timeout.Infinite, Timeout.Infinite);
        return Task.CompletedTask;
    }

    public void Dispose()
    {
        _timer?.Dispose();
    }
}

这就是我在

Program.cs

注册的方式
builder.Services.AddSingleton<ChangeOrderStatusHostedService>(); // here it is
builder.Services.AddDbContext<ApplicationDbContext>(options =>
    options.UseNpgsql(builder.Configuration.GetConnectionString("DefaultConnection")));

花了很多时间试图解决这个问题,但我唯一成功的是现在我的项目至少可以毫无例外地构建。

c# .net asp.net-core-hosted-services
1个回答
0
投票

您必须通过

AddHostedService
扩展方法注册该托管服务,而不是调用
builder.Services.AddSingleton<ChangeOrderStatusHostedService>()
.

builder.Services.AddHostedService<ChangeOrderStatusHostedService>();

如果可能的话,最好从实现BackgroundService

IHostedService
继承。

查看文档

© www.soinside.com 2019 - 2024. All rights reserved.