如何将 UserManager 注入 Program.cs 或 Startup.cs
How to inject UserManager to Program.cs or Startup.cs
这是我的代码的一部分:
public void ConfigureServices(IServiceCollection services)
{
options.Events = new CookieAuthenticationEvents() {
OnValidatePrincipal = async (c) =>
{
//using (ServiceProvider serviceProvider = builder.Services.BuildServiceProvider()) // ASP0000
//{
// var userManager = serviceProvider.GetRequiredService<UserManager<MyUser>>();
//var myUser = await userManager.GetUserAsync(c.Principal);
//if (myUser != null && !myUser.EmailConfirmed)
//{
// c.RejectPrincipal();
//}
//}
}
};
});
}
当取消注释时它可以工作,但是在 BuildServiceProvider 方法上有一个警告(绿色下划线)说:
ASP0000: Calling BuildServiceProvider from application code results in
an additional copy of singleton services being created.
那么在 ConfigureServices 中获取 UserManager 的替代方法是什么?
我无法注入它,因为 ConfigureServices 方法只接受零个或一个参数,必须是 IServiceCollection。
你不应该在处理程序中构建提供者并从中解析某些东西(这绝对不是你想要为每个主体验证做的操作),只需使用它的上下文参数:
new CookieAuthenticationEvents
{
OnValidatePrincipal = context =>
{
var userManager = context.HttpContext.RequestServices.GetRequiredService<UserManager<MyUser>>();
}
}
这是我的代码的一部分:
public void ConfigureServices(IServiceCollection services)
{
options.Events = new CookieAuthenticationEvents() {
OnValidatePrincipal = async (c) =>
{
//using (ServiceProvider serviceProvider = builder.Services.BuildServiceProvider()) // ASP0000
//{
// var userManager = serviceProvider.GetRequiredService<UserManager<MyUser>>();
//var myUser = await userManager.GetUserAsync(c.Principal);
//if (myUser != null && !myUser.EmailConfirmed)
//{
// c.RejectPrincipal();
//}
//}
}
};
});
}
当取消注释时它可以工作,但是在 BuildServiceProvider 方法上有一个警告(绿色下划线)说:
ASP0000: Calling BuildServiceProvider from application code results in an additional copy of singleton services being created.
那么在 ConfigureServices 中获取 UserManager 的替代方法是什么? 我无法注入它,因为 ConfigureServices 方法只接受零个或一个参数,必须是 IServiceCollection。
你不应该在处理程序中构建提供者并从中解析某些东西(这绝对不是你想要为每个主体验证做的操作),只需使用它的上下文参数:
new CookieAuthenticationEvents
{
OnValidatePrincipal = context =>
{
var userManager = context.HttpContext.RequestServices.GetRequiredService<UserManager<MyUser>>();
}
}