Я создаю пользовательский поставщик хранилища для ASP. NET WebAPI, следуя документации (https://docs.microsoft.com/en-us/aspnet/identity/overview/extensibility/overview-of-custom-storage-providers-for-aspnet-identity), и в настоящее время я перенастраиваю Identity для использования моего UserStore. Мой пользовательский контекст базы данных SqlDataAccess
и установлен в Startup.Auth.cs
, согласно документации.
app.CreatePerOwinContext<SqlDataAccess>(GetDataAccess);
, где GetDataAccess
- это функция, которая возвращает экземпляр SqlDataAccess
с конфигурацией.
private SqlDataAccess GetDataAccess()
{
var dataAccess = new SqlDataAccess(WebApiConfig.Configuration);
return dataAccess;
}
Проблема заключается в том, что в IdentityConfig.cs
я настроил ApplicationUserManager
с
var manager = new ApplicationUserManager(new UserStore(context.Get<SqlDataAccess>()));
Это то же самое, что написано в документации, с контекстом базы данных EntityFramework, замененным моим SqlDataAccess и моим собственным UserStore. Это приводит к ошибке Argument 1: cannot convert from'DataManager.Identity.UserStore' to'Microsoft.AspNet.Identity.IUserStore<DataManager.Identity.User>' DataManager C:\Website\DataManager\App_Start\IdentityConfig.cs
Мой UserStore реализует IUserStore из Identity, поэтому я не вижу причины возникновения этой проблемы. Если это необходимо, моя реализация UserStore приведена ниже, я еще не подключил ее к своей библиотеке.
using DataAccessLibrary.DataAccess;
using DataAccessLibrary.Storage;
using Microsoft.AspNet.Identity;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Web;
namespace DataManager.Identity
{
public class UserStore : IUserStore<User, string>, IUserRoleStore<User, string>, IUserPasswordStore<User, string>
{
ISqlDataAccess _db;
public UserStore(ISqlDataAccess db)
{
_db = db;
}
public Task AddToRoleAsync(User user, string roleName)
{
throw new NotImplementedException();
}
public Task CreateAsync(User user)
{
throw new NotImplementedException();
}
public Task DeleteAsync(User user)
{
throw new NotImplementedException();
}
public void Dispose()
{
throw new NotImplementedException();
}
public Task<User> FindByIdAsync(string userId)
{
throw new NotImplementedException();
}
public Task<User> FindByNameAsync(string userName)
{
throw new NotImplementedException();
}
public Task<string> GetPasswordHashAsync(User user)
{
throw new NotImplementedException();
}
public Task<IList<string>> GetRolesAsync(User user)
{
throw new NotImplementedException();
}
public Task<bool> HasPasswordAsync(User user)
{
throw new NotImplementedException();
}
public Task<bool> IsInRoleAsync(User user, string roleName)
{
throw new NotImplementedException();
}
public Task RemoveFromRoleAsync(User user, string roleName)
{
throw new NotImplementedException();
}
public Task SetPasswordHashAsync(User user, string passwordHash)
{
throw new NotImplementedException();
}
public Task UpdateAsync(User user)
{
throw new NotImplementedException();
}
}
}