我的自定义UserManager没有身份的依赖注入

时间:2018-07-25 14:12:27

标签: c# .net-core identity asp.net-core-identity

我目前正在尝试在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>();
}

2 个答案:

答案 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");
    }
}