Ответ 1
На самом деле это не так сложно.
Создайте новый класс, который реализует интерфейс IUserStore.
public class MyUserStore : IUserStore<User> { }
... затем реализовать свои методы. Я думаю, что есть 5 или 6, чтобы начать с, что дело с созданием/обновлением/удалением/поиском пользователей. Если вы используете сущность-фреймворк для своих пользовательских объектов, тогда просто конструктор вставляет экземпляр его в экземпляр хранилища пользователя.
public class MyUserStore : IUserStore<User>
{
private readonly MyDbContext _dbContext;
public MyUserStore(MyDbContext dbContext) { _dbContext = dbContext; }
}
Затем в методах интерфейса просто передайте свой dbcontext:
Task IUserStore<User>.CreateAsync(User user)
{
_dbContext.Set<User>().Create(user);
return Task.FromResult(0);
}
Тогда есть много других дополнительных интерфейсов, которые вы можете реализовать для поддержки дополнительных функций. Например, если вы хотите, чтобы ваш UserStore мог обрабатывать шифрование паролей для вас, реализуйте IUserPasswordStore:
public class MyUserStore : IUserStore<User>, IUserPasswordStore<User> { }
... и т.д. для других интерфейсов, таких как IUserRoleStore и т.д.
Что может действительно помочь - это инструмент декомпиляции, такой как .NET Reflector или ReSharper для перехода к декомпилированным источникам. Если вы декомпилируете UserStore по умолчанию в библиотеке Microsoft.AspNet.Identity.EntityFramework, вы можете посмотреть, как они это сделали. Некоторые из декомпилированного кода могут быть трудночитаемыми, поскольку некоторые из них являются асинхронными, но вы должны получить его суть.