gpt4 book ai didi

c# - 在类库中实例化身份 ApplicationUserManager

转载 作者:行者123 更新时间:2023-11-30 19:36:46 24 4
gpt4 key购买 nike

我不喜欢 Identity 的一件事是 UserManagers 必须在您希望为其获取用户信息的 Controller 中实例化。在我的项目中,我将所有业务逻辑移到了 DAL 类库中,并且希望身份也在那里。

我已经将所有身份类移至 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>());
}

所以我可以通过数据库上下文访问用户和角色

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 类。

在controller中,实例化如下

    private ApplicationUserManager _userManager;

public ApplicationUserManager UserManager
{
get
{
return _userManager ?? HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>();
}
private set
{
_userManager = value;
}
}

但是,在 DAL 类库的存储库中,我无权访问 OwinContext 以获取用户管理器。

如何从类库中访问 ApplicationUserManager?

最佳答案

Visual Studio 的默认 MVC 模板使用以下代码创建 ApplicationUserManager 实例。

var manager = new ApplicationUserManager(new UserStore<ApplicationUser>(context.Get<ApplicationDbContext>()));

如果您可以为它提供从 OwinContext 检索的 ApplicationDbContext(在您的情况下为 DataContext) 实例,则可以在您的类库中实例化它/p>

例如

var manager = new ApplicationUserManager(new UserStore<ApplicationUser>(new DataContext()));

而且您可能必须找到一些替代方法来实例化 ApplicationUserManager 类属性,例如 UserValidatorPasswordValidator 等。

我希望这能给你一些继续下去的想法!

关于c# - 在类库中实例化身份 ApplicationUserManager,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42556258/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com