В asp. net ядре 3.1 веб-приложения. У меня есть прослушиватель событий, унаследованный от класса BackgroundService. Почему в хранилище инъекций, в которое вставлен DbContext, возникает ошибка?
Запуск:
services.AddDbContext<DBContext>(options => {
options.UseSqlServer("...connection string...");
});
services.AddTransient<ICalStatRepo, CalStatRepo>();
services.AddTransient<IHostedService, BackgroundListener>();
Репозиторий:
public class CalStatRepo : ICalStatRepo
{
private readonly DBContext _context;
public CalStatRepo(DBContext context)
{
_context = context;
}
public async Task InsertCallStat(RawCallStatRegisterViewModel model)
{
var rawCall = new RawCallStat
{
HappenedAt = model.HappenedAt,
Source = model.Source,
Destination = model.Destination,
Status = model.Status
};
_context.Entry(rawCall).State = EntityState.Added;
try
{
await _context.SaveChangesAsync();
}
catch (Exception e)
{
throw new Exception("Insert new call stat fails with this error : " + e.Message);
}
}
}
Фоновая служба:
public class BackgroundListener : BackgroundService
{
private readonly IServiceProvider _service;
public BackgroundListener(IServiceProvider service)
{
_service = service;
}
}
// what I want to do is insert logs into db here
private async void EvenetListener(Object sender, Event e)
{
var calStatRepo = _service.GetRequiredService<ICalStatRepo>(); //> Error
await calStatRepo.InsertCallStat(args);
}
Проблема при добавлении требуемой службы в прослушивателе событий приведет к ошибке, как показано ниже:
Не удалось разрешить 'Repositories.ICalStatRepo' от провайдера root, поскольку для него требуется служба с ограниченным доступом Models.Context.DBContext.
DBContext добавляется при запуске как services.AddDbContext и внедряется в CalStatRepo, а затем добавляется в качестве требуемой службы в прослушиватель событий в фоновый сервис, но почему он снова требуется в качестве сервиса с областью действия?
Любая помощь будет оценена.