ASP. NET Идентификация не может быть преобразована в IUserStore - PullRequest
0 голосов
/ 20 января 2020

Я создаю пользовательский поставщик хранилища для 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();
        }
    }
}
...