Обработка служб общеобразований в синглтонских фоновых службахC#

Место общения программистов C#
Ответить
Anonymous
 Обработка служб общеобразований в синглтонских фоновых службах

Сообщение Anonymous »

Я разрабатываю фоновое обслуживание в Asp.net Core 8, которая работает как Singleton.
Эта служба должна выполнять повторяющиеся задачи, например, записать данные в базу данных. Для этого мне нужен мой dbcontext, который зарегистрирован как сервис Scoped. Это имеет смысл, так как служба общежития не может быть разрешена из Синглтона. Итак, как правильный способ сделать это?

Код: Выделить всё

while (!stoppingToken.IsCancellationRequested)
{
using (var scope = _serviceProvider.CreateScope())
{
var dbContext = scope.ServiceProvider.GetRequiredService();
// ... work with the dbContext ...
}
await Task.Delay(TimeSpan.FromMinutes(5), stoppingToken);
}
< /code>
Класс фоновой службы синглтона - что -то вроде: < /p>
public class MySingletonBackgroundService : BackgroundService
{
private readonly ILogger _logger;
private readonly IServiceScopeFactory _scopeFactory;

public MySingletonBackgroundService(ILogger logger, IServiceScopeFactory scopeFactory)
{
_logger = logger;
_scopeFactory = scopeFactory;
}

protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
_logger.LogInformation("Background service is starting.");
while (!stoppingToken.IsCancellationRequested)
{
using (var scope = _scopeFactory.CreateScope())
{
var dbContext = scope.ServiceProvider.GetRequiredService();
_logger.LogInformation("Doing work with a scoped DbContext.");
// Do the work here
}
await Task.Delay(TimeSpan.FromSeconds(30), stoppingToken);
}
}
}
использует iServicesCopeFactory, как показано в моем примере рекомендуемый подход «наилучшая практика» в современном ядре ASP.NET?

Подробнее здесь: https://stackoverflow.com/questions/796 ... d-services
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»