UnitOfWork, autofac, Репозитории и личность - PullRequest
0 голосов
/ 21 марта 2019

Как я могу использовать Identity в UnitOfWork?
Я хочу AccountController наследовать от UnitOfWork

Не из

IApplicationUserManager userManager,
IApplicationSignInManager signInManager,
IAuthenticationManager authenticationManager,
IApplicationRoleManager applicationRoleManager

Я хочу использовать Identity, но не из Entity Framework
Я сделал много поисков, но не дал результатов

1 Ответ

0 голосов
/ 21 марта 2019

Единственное, что ваш AccountController должен наследовать, это Controller, если у вас нет базового класса. Тогда ваш базовый класс должен наследовать Controller, а AccountController наследует базовый класс.

Ваш UserManager и все остальные классы Identity должны работать, должны быть зарегистрированы в AutoFac. Он должен выглядеть примерно так: this , но в этой статье не говорится об использовании Entity Framework.

Чтобы использовать UnitOfWork с вашим UserStore, IUnitOfWork должен быть параметром, и вам нужно будет указать AutoFac, какие параметры вы передаете. Что-то вроде этого.

    builder.RegisterType<ApplicationUserStore>().As<IUserStore<UserMamber>>()
            .WithParameter(new TypedParameter(typeof(IUnitOfWork), new UnitOfWork()))
            .InstancePerRequest();

Редактировать: Ниже приведен дополнительный код, который вы просили:

public class UserStore<TUser> : IUserStore<TUser, int>
   where TUser : IdentityMember, new()
{
    private UserTable<TUser> _userTable;
    private IUnitOfWork _db { get; set; }

    public UserStore(IUnitOfWork database)
    {
        _db = database;
        _userTable = new UserTable<TUser>(database);
    }
    public Task<TUser> FindByNameAsync(string userName)
    {
        return Task.FromResult(_userTable.Login(userName));
    }
}

public class UserTable<TUser> where TUser : IdentityMember, new()
{
    private readonly IUnitOfWork _unitOfWork;

    public UserTable(IUnitOfWork unitOfWork)
    {
        this._unitOfWork = unitOfWork;
    }
    public TUser Login(string userName)
    {
        var y = _unitOfWork.WebPortalUsers.FindByUserName(userName);

        var Identity = new TUser();
        if(Identity != null)
        {
            Identity.UserName = y.UserName;
            Identity.Id = y.Id;
        }
        return Identity;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...