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

标签 c# asp.net-identity-2 asp.net-mvc-5

我不喜欢 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/

相关文章:

c# - 类型 'string' 必须是不可为 null 的类型才能将其用作泛型类型或方法 'System.Nullable<T>' 中的参数 T

c# - System.Configuration.ConfigurationException 在 Windows Server 2012 上运行基于 .NET 4.0 的服务构建时

c# - 用现代 OO C 类语言执行此操作的好方法吗?

c# - ASP.NET MVC 5 - EntityType 没有定义键

c# - Razor 语法在 MVC 5 View VS2013 上损坏

c# - MVC SelectList 中的 LINQ 查询结果作为值和文本 - 不起作用

c# - 如何在 PhantomDriver( headless 浏览器)中没有 findElement 函数错误的情况下隐藏 FirefoxDriver(使用 Selenium)?

c# - UserManager 不断抛出 System.ArgumentNullException

asp.net-mvc-5 - UserManager 在 ASPNET Identity 2 应用程序中始终为空

c# - 使用 Entity Framework 将 asp.net Identity 实现到现有数据库中