【问题标题】:Dependency Injection for my custom UserManager WITHOUT Identity没有身份的自定义 UserManager 的依赖注入
【发布时间】:2018-07-25 14:12:27
【问题描述】:

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

【问题讨论】:

  • 当打算重新发明轮子时,看看当前的轮子是如何构建的会有所帮助。幸运的是源代码可用。 github.com/aspnet/Identity/blob/… 他们似乎将大部分内容都添加为范围。

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


【解决方案1】:

当打算重新发明轮子时,看看现有的轮子是如何构建的会有所帮助。

幸运的是,source code 可用,而且他们似乎将大多数内容添加为 scoped

//...

services.TryAddScoped<UserManager<TUser>>();

//...

所以在你的情况下,你可以遵循类似的模式

public void ConfigureServices(IServiceCollection services) {

    services.AddScoped<IUserManager, UserManager>(); // Add my custom manager

    //...
}

【讨论】:

    【解决方案2】:

    如果我了解您的尝试,请查看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");
        }
    }
    

    【讨论】:

    • 有点,但我想在那里做更多的事情,但正如我在问题中提到的那样,我不想使用身份或与之相关的任何东西。
    猜你喜欢
    • 2017-08-02
    • 2015-01-01
    • 1970-01-01
    • 2016-05-05
    • 1970-01-01
    • 2012-11-12
    • 2011-08-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多