Невозможно получить доступ к удаленному объекту в UserManager.Users с помощью. NET Core 3.1 - PullRequest
0 голосов
/ 18 марта 2020

Я использую 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);
       }
 }
...