Я использую ninject для DI, и у меня есть контроллер, когда я хочу добавить UserManager моего собственного AppUser:
public class AdminController: Controller
{
private UserManager<AppUser> userManager;
public AdminController(UserManager<AppUser> usrMgr)
{
userManager = usrMgr;
}
public ViewResult Index() => View(userManager.Users);
}
В методе ConfigureServices я добавляю
services.AddDbContext<AppIdentityDbContext>(options => options.UseSqlServer(Configuration["ConnectionStrings:SportsStoreIdentity"]));
services.AddIdentity<AppUser, IdentityRole>().AddEntityFrameworkStores<AppIdentityDbContext>().AddDefaultTokenProviders();
, чем Я объявляю «Настроить» следующим образом:
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, AppIdentityDbContext context, UserManager<AppUser> usrMgr)
{
app.UseAuthentication();
NinjectWebCommon.ConnectionString = Configuration["ConnectionStrings:DefaultConnection"];
kernel = NinjectWebCommon.Kernel;
kernel.Bind<UserManager<AppUser>>().ToConstant(usrMgr).InSingletonScope();
kernel.Bind<AppIdentityDbContext>().ToConstant(context).InSingletonScope();
//Other code...
}
Это вводит userManager в мой контроллер администратора, но когда я пытаюсь вызвать Index, возникает ошибка на userManager.Users:
System.ObjectDisposedException : «Невозможно получить доступ к удаленному объекту. Распространенной причиной этой ошибки является удаление контекста, который был разрешен путем внедрения зависимостей, а затем попытка использовать тот же экземпляр контекста в другом месте вашего приложения. Это может произойти, если вы вызываете Dispose () для контекста или заключаете контекст в оператор using. Если вы используете внедрение зависимостей, вы должны позволить контейнеру внедрения зависимости позаботиться об удалении экземпляров контекста.
Как предотвратить удаление UserManager? Я имею дело с разными сферами, но это не работает. Когда я запускаю такой метод, ошибка возникает только в userManager.
public async Task<IActionResult> Index()
{
var user = new AppUser { UserName = "test@gmail.com", Email = "test@gmail.com" };
var d = await userManager.CreateAsync(user, "1234567");
if (d == IdentityResult.Success)
{
return Ok();
}
else
{
return BadRequest(d);
}
}