UnitOfWork,autofac,存储库和身份

时间:2019-03-21 18:39:13

标签: asp.net-mvc asp.net-identity repository-pattern unit-of-work

如何在UnitOfWork中使用身份?
我希望AccountController继承自UnitOfWork

不是来自

IApplicationUserManager userManager,
IApplicationSignInManager signInManager,
IAuthenticationManager authenticationManager,
IApplicationRoleManager applicationRoleManager

我想使用身份,但不想使用实体框架
我进行了很多搜索,但没有任何结果

1 个答案:

答案 0 :(得分:0)

除非有基类,否则AccountController唯一应继承的是Controller。然后,您的基类应该继承Controller,而AccountController继承基类。

您的UserManager和所有其他类Identity需要工作,需要在AutoFac中注册。它看起来应该像this,但该文章并未讨论使用实体框架。

要与UserStore一起使用UnitOfWork,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;
    }
}