我不喜欢Identity的一件事情是UserManagers必须在控制器中实例化,您希望获取用户信息。在我的项目中,我将所有的业务逻辑转移到DAL类库中,并希望Identity也能在那里。在类库中实例化Identity ApplicationUserManager
我已经感动了所有的标识类到DAL类库(ApplicationRole,ApplicationUser,ApplicationRoleManager,ApplicationSignInManager,ApplicationUserManager,EmailSerivce,SmsService)
我的DataContext从IdentityDBContext
继承public class DataContext : IdentityDbContext<ApplicationUser>
{
public DataContext()
: base("DefaultConnection", throwIfV1Schema: false)
{
this.Configuration.LazyLoadingEnabled = false;
this.Configuration.ProxyCreationEnabled = false;
}
public static DataContext Create()
{
return new DataContext();
}
static DataContext()
{
Database.SetInitializer(new MigrateDatabaseToLatestVersion<DataContext, DataContextMigrationsConfiguration>());
}
所以我必须通过DB背景
internal class UserRepository
{
internal ApplicationUser GetUserById(string id)
{
using(var db = new DataContext())
{
return db.Users.Where(a => a.Id == id).FirstOrDefault();
}
}
}
访问用户和角色的问题是我做的无法访问ApplicationUserManager公开的方法。我试图从我的用户库中访问ApplicationUserManager,但不知道如何实例化ApplciationUserManager类。
在控制器,它的实例如下
private ApplicationUserManager _userManager;
public ApplicationUserManager UserManager
{
get
{
return _userManager ?? HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>();
}
private set
{
_userManager = value;
}
}
然而,在DAL类库的仓库,我没有访问OwinContext来获取用户的经理。
如何从类库中访问ApplicationUserManager?
这是完美的。正是我需要的!谢谢! – JoeyD
很高兴听到这一点。 *请考虑标记答案,如果它解决您的问题* –