BackgroundService с asp. net Core MVC 3.1 - PullRequest
       12

BackgroundService с asp. net Core MVC 3.1

0 голосов
/ 24 апреля 2020

Вот что я сделал:

public void ConfigureServices(IServiceCollection services)
{
   ...
   services.AddHostedService<MyBatch>(); 
}


public class MyBatch : BackgroundService
{
    protected override async Task ExecuteAsync(CancellationToken stopToken)
    {
       while (!stopToken.IsCancellationRequested)
       {
            Console.Writeline("test");
            await Task.Delay(TimeSpan.FromSeconds(10));
       }
    }
}

У меня 2 проблемы:

  • Первое: веб-приложение не отвечает на порт 5000, когда я запустите "do tnet run". Если я удаляю свою партию, порт 5000 снова работает. (тестовые сообщения отображаются на консоли)

  • Второе: я хочу получить доступ к своей базе данных с помощью Entity Framework. Как я могу получить доступ к контексту моей базы данных из этого пакетного файла?

Спасибо

1 Ответ

0 голосов
/ 25 апреля 2020

Я хочу получить доступ к своей базе данных с помощью Entity Framework. Как я могу получить доступ к контексту моей базы данных из этого пакетного файла?

Чтобы использовать сервис с областью действия (например, DbContext et c) из сервиса, размещенного на одном сервере, вы можете создать область, а затем использовать ее для Разрешите требуемые службы из этой области, как показано ниже.

public class MyBatch : BackgroundService
{

    public IServiceProvider Services { get; }
    public MyBatch(IServiceProvider services)
    {
        Services = services;
    }
    protected override async Task ExecuteAsync(CancellationToken stopToken)
    {
        while (!stopToken.IsCancellationRequested)
        {
            Console.WriteLine("test");

            await Task.Delay(TimeSpan.FromSeconds(10));

            await DoWithDb(stopToken);
        }
    }

    private async Task DoWithDb(CancellationToken stoppingToken)
    {
        //...

        using (var scope = Services.CreateScope())
        {
            var _myDbContext =
                scope.ServiceProvider
                    .GetRequiredService<MyDbContext>();



            //code logic here
            //...
        }
    }
}

Подробную информацию о том, как «использовать службы с областью действия в фоновом режиме», можно также найти здесь: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/host/hosted-services?view=aspnetcore-3.1&tabs=visual-studio#consuming -a-область действия-сервис-в-фона задачи

...