Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法访问UserManager上的已释放对象。使用.NET Core 3.1的用户_C#_Asp.net Core_Asp.net Core Mvc_Ninject_Ninject.web.mvc - Fatal编程技术网

C# 无法访问UserManager上的已释放对象。使用.NET Core 3.1的用户

C# 无法访问UserManager上的已释放对象。使用.NET Core 3.1的用户,c#,asp.net-core,asp.net-core-mvc,ninject,ninject.web.mvc,C#,Asp.net Core,Asp.net Core Mvc,Ninject,Ninject.web.mvc,我正在使用ninject到DI,当我想注入我自己的AppUser的UserManager时,我有一个控制器: public class AdminController: Controller { private UserManager<AppUser> userManager; public AdminController(UserManager<AppUser> usrMgr) { userManager = usrMgr;

我正在使用ninject到DI,当我想注入我自己的AppUser的UserManager时,我有一个控制器:

public class AdminController: Controller
{
    private UserManager<AppUser> userManager;

    public AdminController(UserManager<AppUser> usrMgr)
    {
        userManager = usrMgr;
    }

    public ViewResult Index() => View(userManager.Users);
}
公共类AdminController:控制器
{
私有用户管理器用户管理器;
公共管理员控制器(UserManager 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();
services.AddDbContext(options=>options.UseSqlServer(配置[“ConnectionString:SportsStoreIdentity]”);
services.AddIdentity().AddEntityFrameworkStores().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...
}
public void配置(IApplicationBuilder应用程序、IHostingEnvironment环境、ILoggerFactory loggerFactory、AppIdentityDbContext上下文、UserManager usrMgr)
{
app.UseAuthentication();
NinjectWebCommon.ConnectionString=配置[“ConnectionString:DefaultConnection”];
kernel=NinjectWebCommon.kernel;
kernel.Bind().ToConstant(usrMgr.InSingletonScope();
kernel.Bind().ToConstant(context.InSingletonScope();
//其他代码。。。
}
将userManager注入我的管理控制器是错误的,但当我尝试调用索引时,userManager上出现错误。用户:

System.ObjectDisposedException:'无法访问已处置的对象。A. 此错误的常见原因是处理已解决的上下文 从依赖项注入,然后稍后尝试使用相同的 应用程序中其他位置的上下文实例。如果您 正在对上下文调用Dispose(),或将上下文包装到 使用语句。如果您使用的是依赖项注入,那么应该让 依赖项注入容器负责处理上下文 实例

如何防止处置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);
       }
 }
公共异步任务索引()
{
var user=new AppUser{UserName=”test@gmail.com“,电子邮件=”test@gmail.com" };
var d=await userManager.CreateAsync(用户,“1234567”);
if(d==IdentityResult.Success)
{
返回Ok();
}
其他的
{
返回请求(d);
}
}

这里可能发生的情况是,您正在将一个
IEnumerable
传递给您的视图(
Users
属性),因此在处理登录管理器后,查询将在视图中缓慢地进行评估。如果是这种情况,您应该作为控制器操作方法的一部分执行查询,并将视图模型返回到视图。否则,您将在视图中有效地运行控制器逻辑,这将导致各种问题,如此。是的,我在视图上有IEnumerable,我更改了它,但它仍然不起作用。此外,我还添加了一些代码和索引类的其他实现。它也不起作用。