2

Visual Studio 2013 で MVC 5 アプリケーションを作成し、認証として個人アカウントを選択すると、スキャフォールディングによって ASP Net Identity が自動的に構成されます。ApplicationDbContextととともにいくつかのクラスを作成しますApplicationUserManager。また、これらのクラスを以下のように OWIN コンテキストに登録して、要求ごとに 1 つのインスタンスを使用します。

 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 > static create メソッドを使用したくない場合、以下のアプローチは正しいですか?

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));
}

ApplicationUserManager2>静的 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"));
        }
  }

ApplicationUserManager3>上記のアプローチでは、リクエストごとに単一のインスタンスを作成するようにOWINコンテキストに登録するにはどうすればよいですか? 'ApplicationUserManagerまた、必要ApplicationUserStoreApplicationDbContext..それらをのコンストラクターに渡すにはどうすればよいApplicationUserManagerですか?

4

0 に答える 0