如何从.net core 2.1 mvc

时间:2018-11-11 08:55:15

标签: asp.net-core-mvc asp.net-identity

我想使用在控制器中调用的自定义注册标识方法来自动注册具有相应角色的用户。这是我到目前为止找到的代码:

public class RegisterUsers 
{
private readonly UserManager<ApplicationUser> _userManager;
    public RegisterUsers(UserManager<ApplicationUser> userManager)
    {
        _userManager = userManager;
    }
    public async Task SystmRegisterUsers(string uname, string sysid, string Email)
    {
         var newuser = new ApplicationUser
        {
            UserName = uname,
            Email = Email,
            SystemuserID = sysid
        };
        string UserPassword = PasswordGenerator.Generate(6, 3, true, true, true, true);
        //var _user = await UserManager.FindByEmailAsync(Configuration.GetSection("UserSettings")["UserEmail"]);
        var createParentUser = await _userManager.CreateAsync(newuser, UserPassword);
        if (createParentUser.Succeeded)
        {
            //here we tie the new user to the "Admin" role 
            await _userManager.AddToRoleAsync(newuser, "Parent");
        }

    }
}

我想在控制器中像这样调用方法SystmRegisterUsers

[HttpPost]
    [ValidateAntiForgeryToken]
    public async Task<IActionResult> Create([Bind("fullname,id,email,...")]MyModel parent)
        {
           if (ModelState.IsValid)
           {
              //create new records
                _context.Add(parent);
                await _context.SaveChangesAsync();
             // and i want to call the method here to create identity users using the data entered:
                 var instance = new RegisterUsers();
                await instance.SystmRegisterUsers(parent.FullName, parent.Parentid, parent.Parentid);
           }
                 return View(parent);
    }

这是说我缺少与userManager相对应的参数。我什至不知道这是做我想做的事的正确方法,我想我缺少一些基本的东西,请帮忙!

1 个答案:

答案 0 :(得分:0)

对于RegisterUsers,它需要UserManager<ApplicationUser> userManager,要从RegisterUsers解析Dependency Injection,可以按照以下步骤操作:

  • RegisterUsers中注册Startup.cs

            public void ConfigureServices(IServiceCollection services)
        {
            //your rest code
    
            services.AddScoped<RegisterUsers>();
        }
    
  • 通过RegisterUsers初始化Dependency Injection

        public class HomeController : Controller
    {
        private readonly RegisterUsers _registerUsers;
        public HomeController(RegisterUsers registerUsers)
        {
            _registerUsers = registerUsers;
        }            
    
        public async Task<IActionResult> Index()
        {
            await _registerUsers.SystmRegisterUsers("a1", "b1", "c1");
            return View();
        }