Почему нельзя разрешить DbContext в конструкторе пользовательского промежуточного программного обеспечения? - PullRequest
1 голос
/ 23 июня 2019

У меня есть пользовательское промежуточное ПО.Я попытался инжектор конструктора, чтобы ввести мой DbContext.Но это не работает.Следующее не работает и выдает исключение InvalidOperationException: Невозможно разрешить службу области «MyDbContext» от корневого поставщика;

private MyDbContext _context;    
public RequestResponseMiddleware(RequestDelegate next, MyDbContext context)
{
    _next = next;
    _context = context;
} 

Но когда я использую его в методе InvokeAsync в качестве параметра, он работает.Следующие работы

public Task InvokeAsync(HttpContext context, MyDbContext  _context)
{

}

Кто-нибудь знает причину?

1 Ответ

3 голосов
/ 23 июня 2019

DbContext обычно регистрируются как сервисы с определенными областями.

При использовании службы промежуточного уровня в промежуточном программном обеспечении внедряйте службу в метод Invoke или InvokeAsync. Не вводите с помощью конструктора, потому что это заставляет сервис работать как одиночный . Для получения дополнительной информации см. Промежуточное программное обеспечение ядра ASP.NET .

.

Акцент на шахте

Ссылка Внедрение зависимостей в ASP.NET Core: срок службы службы

...