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
Dependency injection DbContext和ASP.net核心标识服务似乎是单例的,而不是文档中描述的范围_Dependency Injection_Asp.net Core_Asp.net Identity_Asp.net Core Identity - Fatal编程技术网

Dependency injection DbContext和ASP.net核心标识服务似乎是单例的,而不是文档中描述的范围

Dependency injection DbContext和ASP.net核心标识服务似乎是单例的,而不是文档中描述的范围,dependency-injection,asp.net-core,asp.net-identity,asp.net-core-identity,Dependency Injection,Asp.net Core,Asp.net Identity,Asp.net Core Identity,在我的startup.cs文件的ConfigureServices函数中,我对我的数据上下文进行了以下设置: services.AddDbContext<MyDbContext>(options => { options.UseSqlServer("Connection string"); }); services.AddDbContext(选项=> { options.UseSqlServer(“连接字符串”); }); 然后为它设置身份服务

在我的startup.cs文件的
ConfigureServices
函数中,我对我的数据上下文进行了以下设置:

services.AddDbContext<MyDbContext>(options =>
   {
       options.UseSqlServer("Connection string");
   });
services.AddDbContext(选项=>
{
options.UseSqlServer(“连接字符串”);
});
然后为它设置身份服务

 services.AddIdentity<MyUser, MyRole>()
         .AddEntityFrameworkStores<MyDbContext, int>()
         .AddDefaultTokenProviders();
services.AddIdentity()
.AddEntityFrameworkStores()
.AddDefaultTokenProviders();
一切都与DI一起工作。我能够从我的控制器访问
MyDbContext
UserManager
,并获得我需要的数据

我也有这样的印象(正如我所读到的),我会为每个请求获得一个新的
MyDbContext
实例。我不认为会发生这种情况
MyDbContext
似乎是一个单例

在服务器A中,我运行以下命令:
await userManager.CheckPasswordAsync(aUser,“theirCurrentPassword”)

当我找到用户并且他们的密码正确时,它返回true

在服务器B上,我指向相同的数据上下文,并使用标识服务。在服务器B上,我运行
wait userManager.ChangePasswordAsync(类似用户,“他们的当前密码”,“他们的新密码”)
。我知道这个函数可以工作并识别更改,因为当我再次运行它(从服务器B内部)时,它会给我一个错误,告诉我“theirCurrentPassword”是错误的

现在,回到服务器A上,我通过一个不同的API调用再次运行
userManager.CheckPasswordAsync
,但这次是传递新密码“theirNewPassword”。我得到一个401(错误的密码)。如果我输入“TheRoldPassword”将会成功,但我已经在服务器B上成功更改了该用户的密码

我唯一能想到的是,服务器A中的
MyDbContext
是同一个实例,即使跨不同的HTTP请求,这与文档相反。如果我关闭服务器A,重新启动它,并发出相同的请求,传入“theirNewPassword”,它将按预期进行身份验证。我无法连续关闭和重新启动服务器

我相信我已经发布了我所关心的所有相关代码。如果没有,请告诉我

那么,我如何确保
MyDbContext
和标识服务具有作用域,而不是单例生存期呢


此外,我如何手动实例化数据上下文并在控制器操作中显式地设置
UserManager
(也称为试图避免DI,它似乎使我的数据上下文和标识服务成为单例).?

AddEntityFrameworkStores扩展方法仅添加作用域生命周期注册表。您能否显示插入和使用该
userManager
的代码?AddEntityFrameworkStores扩展方法仅添加作用域生命周期注册表您能否显示插入和使用该
userManager
的代码?