#c# #asp.net #asp.net-core #dependency-injection #async-await
Вопрос:
У меня есть несколько таможенных служб, зарегистрированных в Startup.cs
:
public void ConfigureServices(IServiceCollection services) { var connection = Configuration.GetConnectionString("WebConnection"); services.AddDbContextlt;ApplicationContextgt;(options =gt; options.UseSqlServer(connection)); services.AddTransientlt;FileHandlergt;(); **more boring services below** }
Мой FileHandler
зависит от контекста бд, зависимость вводится через конструктор:
public FileHandler(ApplicationContext db) { _db = db; } ApplicationContext _db;
Позже в моем коде я запускаю:
var user = await CreateUserAsync();
где CreateUserAsync()
расшифровывается:
async Tasklt;Usergt; CreateUserAsync() { var user = new User { PatientCode = PatientId, Password = _provider.GetRandomAlphanumericString() }; var userRole = await _db.Roles.FirstOrDefaultAsync(r =gt; r.Name == "user"); if (userRole != null) user.Role = userRole; await _db.Users.AddAsync(user); await _db.SaveChangesAsync(); return user; }
Здесь каждый раз после первой асинхронности/ожидания мой _db удаляется. С помощью этого кода строка выдает ошибку «Не удается получить доступ к удаленному экземпляру контекста». await _db.Users.AddAsync(user);
Если я удалю все асинхронные и ожидающие модификаторы:
User CreateUserAsync() { var user = new User { PatientCode = PatientId, Password = _provider.GetRandomAlphanumericString() }; var userRole = _db.Roles.FirstOrDefault(r =gt; r.Name == "user"); if (userRole != null) user.Role = userRole; _db.Users.Add(user); _db.SaveChanges(); return user; }
код работает так, как должен. Почему это происходит именно так? Пытался сам исследовать проблему, люди говорят, что обычно это происходит, когда вы пропускаете какое-то ожидание (если вы не ждете окончания асинхронной операции), но, думаю, это не мой случай. Любая помощь будет высоко оценена.
Комментарии:
1. Вам нужно предоставить больше контекста о том, где вы вызываете
CreateUserAsync
, вероятно, забудьте о некоторых ожиданиях для какой-либо асинхронной функции.