ASP.NET Core 2.1 Не удается получить доступ к контексту базы данных из размещенной службы
Я пишу приложение в asp.net core 2.1, в котором размещен сервис. Причина в том, что время от времени мне нужно выполнять некоторые проверки в базе данных.
Я сталкиваюсь с некоторыми проблемами. Я не могу внедрить контекст базы данных в мой размещенный сервис, поскольку размещенный сервис - это одноэлементный сервис, а контекст базы данных - сервис с ограниченным доступом.
Я попытался обойти эту проблему, создав дополнительный веб-API, который обрабатывает то, что мне нужно, и заставив мою размещенную службу вызывать этот API, когда это необходимо. Это добавило проблему разоблачения API и необходимости жесткого кодирования абсолютного URL в моем размещенном классе обслуживания, поскольку относительный URL не работал.
Для меня все это похоже на взлом. Возможно, есть лучший способ добиться того, что мне нужно. Поэтому я здесь, чтобы попросить кого-нибудь посоветовать, каковы наилучшие методы решения моей проблемы. Спасибо!
1 ответ
Чтобы использовать объект в области IHostedService
Вы должны создать область внедрения зависимости с IServiceScopeFactory
, В рамках этой области вы можете использовать определенные сервисы. Документ об использовании сервиса с заданной областью в фоновом режиме объяснил это.
public class TimedHostedService : IHostedService, IDisposable
{
private readonly IServiceScopeFactory _scopeFactory;
private readonly ILogger _logger;
private Timer _timer;
public TimedHostedService(ILogger<TimedHostedService> logger, IServiceScopeFactory scopeFactory)
{
_logger = logger;
_scopeFactory = scopeFactory;
}
// Other methods
private void DoWork(object state)
{
_logger.LogInformation("Timed Background Service is working.");
using (var scope = _scopeFactory.CreateScope())
{
var dbContext = scope.ServiceProvider.GetRequiredService<YourDbContext>();
//Do your stuff with your Dbcontext
...
}
}
}