2016-07-18 8 views
1

Ich möchte Microsoft.AspNetCore.Identity verwenden, aber ohne EntityFramework - Ich versuche, meine eigene Implementierung von IUserStore zu verwenden. Ich habe nicht entschieden, welche Datenbank zu verwenden, aber ich denke, dass es für diese Frage unerheblich ist.Probleme bei der Implementierung von IUserStore

Relevante Klassen, möglichst abgespeckte:

Startup.cs:

public void ConfigureServices(IServiceCollection services) 
    { 
     services.AddMvc(); 
     services.AddIdentity<ApplicationUser, IdentityRole>() 
      .AddUserStore<CustomUserStore<ApplicationUser>>() 
      .AddUserManager<CustomUserManager>(); 
    } 

ApplicationUser:

public class ApplicationUser 
{ 
    public string UserName { get; set; } 
    public string Email { get; set; } 
} 

CustomUserStor:

public class CustomUserStore<TUser> : IUserStore<TUser> where TUser : ApplicationUser 
{ 
    private bool _disposed; 

    public async Task<IdentityResult> CreateAsync(TUser user, CancellationToken cancellationToken = default(CancellationToken)) 
    { 
     //Trying to hit a breakpoint here 
     throw new NotImplementedException(); 
    } 

    //Other method implementations removed for brevity 

    void IDisposable.Dispose() 
    { 
     _disposed = true; 
    } 
} 

CustomUserManager:

public class CustomUserManager : UserManager<ApplicationUser> 
{ 
    public CustomUserManager(IUserStore<ApplicationUser> store, IOptions<IdentityOptions> optionsAccessor, IPasswordHasher<ApplicationUser> passwordHasher, IEnumerable<IUserValidator<ApplicationUser>> userValidators, IEnumerable<IPasswordValidator<ApplicationUser>> passwordValidators, ILookupNormalizer keyNormalizer, IdentityErrorDescriber errors, IServiceProvider services, ILogger<UserManager<ApplicationUser>> logger) 
     : base(store, optionsAccessor, passwordHasher, userValidators, passwordValidators, keyNormalizer, errors,services,logger) 
    { 

    } 

    public override async Task<IdentityResult> CreateAsync(ApplicationUser user) 
    { 
     // Trying to hit a breakpoint here 
     return await this.Store.CreateAsync(user, new CancellationToken()); 
    } 
} 

ExampleController:

[Route("api/example")] 
public class ExampleController : Controller 
{ 
    private CustomUserManager _userManager; 
    public ExampleController(CustomUserManager userManager) 
    { 
     _userManager = userManager; 
    } 

    [Route("test")] 
    public void Test() 
    { 
     var user = new ApplicationUser { UserName = "something", Email = "somthingElse" }; 
     _userManager.CreateAsync(user, "password"); 
    } 
} 

Wenn ich die URL traf ich verwende es zu testen: api/example/test, wird der Konstruktor in CustomUserManager getroffen, aber nicht CreateAsync in CustomUserManager, und so wird nichts ingetroffen.

Antwort

0

Sie überschreiben die CreateAsync(ApplicationUser user) Methode in Ihrem CustomUserManager, aber in Ihrer Test() Methode rufen Sie die CreateAsync(ApplicationUser user, string password) Methode auf.

Sie rufen die falsche Methode an.

+0

Guter Ort. Dummer Fehler. – user888734

Verwandte Themen