Я написал свое собственное промежуточное программное обеспечение, которое я добавляю в
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
//...
app.UseAutologin();
app.UseMvc(routes =>
{
//...
Итак, это последнее промежуточное ПО, прежде чем Mvc вступает в игру.
В моем методе middleware Invoke
я хочу (косвенно) получить доступ к DbContext
.
public async Task Invoke(HttpContext context)
{
if (string.IsNullOrEmpty(context.User.Identity.Name))
{
var applicationContext = _serviceProvider.GetService<ApplicationDbContext>();
var signInManager = _serviceProvider.GetService<SignInManager<ApplicationUser>>();
var result = await signInManager.PasswordSignInAsync(_options.UserName, _options.Password, true, false);
}
await _next(context);
}
Почти каждый раз я получаю следующее исключение:
InvalidOperationException
: Была сделана попытка использовать контекст пока он настроен. Невозможно использовать экземплярDbContext
внутриOnConfiguring
, поскольку он все еще настроен в этой точке.
Теперь это ясно выражено методом PasswordSignInAsync
. Но как я могу гарантировать, что модель была создана, прежде чем делать такие вещи?
Возможно, я был не совсем ясен: я не хочу использовать DbContext
сам - PasswordSignInAsync
использует его при проверке пользователя и пароля.