我目前正在尝试在ASP.Net Core 2.1中使用自己的UserManager创建自己的AccountController。
UserManager应该在数据库中管理与用户相关的过程,例如验证,注册,密码更改等,我希望将它作为AccountController构造函数中的参数传递。我已经用services.AddDbContext<CustomDB>(...)
配置了存储
我无法确定的问题是我应该如何注入UserManager(其生存期应为-Singleton,Transient,Scoped)。我不希望在任何情况下都使用身份(这就是我创建新身份的原因)。换句话说,我正在寻找services.AddIdentity()
的替代版本,以便正确注入我的UserManager。
AccountControler.cs:
public class AccountController : Controller
{
private readonly IUserManager _userManager;
public AccountController(IUserManager userManager)
{
_userManager = userManager;
}
...
}
Startup.cs:
public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton<IUserManager, UserManager>();
//or
services.AddTransient<IUserManager, UserManager>();
//or
services.AddScoped<IUserManager, UserManager>();
}
答案 0 :(得分:1)
当打算重新设计轮子时,有助于了解现有轮子的构造。
幸运的是,source code可用,并且它们似乎将大多数内容添加为作用域。
"section\n signature"
因此,在您的情况下,您可以遵循类似的模式
//...
services.TryAddScoped<UserManager<TUser>>();
//...
答案 1 :(得分:0)
如果我了解您的尝试,请查看此link。
示例:
public async Task<ActionResult> Register(RegisterViewModel model)
{
if (ModelState.IsValid) {
var user = new ApplicationUser() { UserName = model.UserName,
MagicCode = model.MagicCode };
var result = await UserManager.CreateAsync(user, model.Password);
if (result.Succeeded) {
await SignInAsync(user, isPersistent: false);
return RedirectToAction("Index", "Home");
}
}