当我在 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>在上面的方法中,我如何注册ApplicationUserManager
OWIN 上下文以便它为每个请求创建单个实例?'ApplicationUserManager
还需要ApplicationUserStore
和ApplicationDbContext
..我如何将它们传递给ApplicationUserManager
的构造函数?