我如何在单位工程中使用身份?
我希望AccountController
从Unitofwork
不是
IApplicationUserManager userManager,
IApplicationSignInManager signInManager,
IAuthenticationManager authenticationManager,
IApplicationRoleManager applicationRoleManager
我想使用身份,但不使用实体框架
我进行了很多搜索,但没有任何结果
除非您有基础类,否则您的帐户控制器应该继承的唯一的是控制器。然后,您的基类应继承控制器和accountController继承基类。
您的UserManager和所有其他类别的身份都需要工作,需要在AutoFac注册。它应该看起来像这样,但是该文章没有谈论使用实体框架。
要与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;
}
}