2

当我在 Visual Studio 2013 中创建 MVC 5 应用程序并选择个人帐户作为身份验证时,脚手架会自动配置 ASP Net Identity。ApplicationDbContext它与和一起创建了几个类ApplicationUserManager。它还使用 OWIN 上下文注册这些类,如下所示,以便每个请求使用单个实例。

 public void ConfigureAuth(IAppBuilder app)
 {
        // Configure the db context, user manager and signin manager to use a single instance per request
        app.CreatePerOwinContext(ApplicationDbContext.Create);
        app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create);
        app.CreatePerOwinContext<ApplicationSignInManager>(ApplicationSignInManager.Create);

 }

基本上它注册static Create每个类的方法。这个静态方法负责创建该类的实例。

问题
1>如果我不想使用静态创建方法,下面的方法是否正确?

public class ApplicationDbContext : IdentityDbContext<ApplicationUser, ApplicationRole, string, IdentityUserLogin, IdentityUserRole, IdentityUserClaim>
{
    public ApplicationDbContext(string connString)
        : base(connString)
    {
    }
}

public void ConfigureAuth(IAppBuilder app)
{
   var conString = ConfigurationManager.ConnectionStrings["Myconnection"].ConnectionString
    app.CreatePerOwinContext(()=>new ApplicationDbContext(conString));
}

2> 如何在ApplicationUserManager不使用静态 Create 方法的情况下进行注册。(它必须设置 UserValidator、PasswordValidator、UserTokenProvider 等)我应该在的构造函数
中设置 Validators 和 UserTokenProvider吗?ApplicationUserManager像下面

public class ApplicationUserManager : UserManager<ApplicationUser, string>
{
     public ApplicationUserManager(ApplicationUserStore store)
        : base(store)
    {
        base.UserValidator = new UserValidator<ApplicationUser>(manager)
        {
            AllowOnlyAlphanumericUserNames = false,
            RequireUniqueEmail = true
        };

        // Configure validation logic for passwords
        base.PasswordValidator = new PasswordValidator
        {
            RequiredLength = 6,
            RequireNonLetterOrDigit = true,
            RequireDigit = true,
            RequireLowercase = true,
            RequireUppercase = true,
        };

        base.EmailService = new EmailService();

        //?????????How do I get options.DataProtectionProvider ??????
        var dataProtectionProvider = options.DataProtectionProvider;
        if (dataProtectionProvider != null)
        {
            base.UserTokenProvider = 
                new DataProtectorTokenProvider<ApplicationUser>(dataProtectionProvider.Create("ASP.NET Identity"));
        }
  }

3>在上面的方法中,我如何注册ApplicationUserManagerOWIN 上下文以便它为每个请求创建单个实例?'ApplicationUserManager还需要ApplicationUserStoreApplicationDbContext..我如何将它们传递给ApplicationUserManager的构造函数?

4

0 回答 0