c# - ASP Identity - 访问引用库上的 HttpContext

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

我正在尝试将我的 ASP 标识逻辑移动到我的解决方案中的另一个项目。

除了无法访问引用库中的 HttpContext 之外,一切都很好。我需要访问 HttpContext 以使用 ApplicationUserManager 为我的数据库播种。

public class ApplicationDbInitializer : DropCreateDatabaseIfModelChanges<ApplicationDbContext>
{
    protected override void Seed(ApplicationDbContext context)
    {
        InitializeIdentityForEF(context);
        base.Seed(context);
    }

    public static void InitializeIdentityForEF(ApplicationDbContext db)
    {            
        var userManager = HttpContext.Current.GetOwinContext().GetUserManager<ApplicationUserManager>();
        var roleManager = HttpContext.Current.GetOwinContext().Get<ApplicationRoleManager>();

        // Create here users and roles using userManager and roleManager
    }
}

所以问题是:如何在没有 HttpContext 的情况下访问 ApplicationUserManagerApplicationRoleManager,或者我如何访问 HttpContext 在这里。

非常感谢

最佳答案

实际上,我会建议一种稍微不同的方法。 Identity 团队在使用基于 OWIN 的临时依赖项注入(inject)容器引导示例时犯下了我认为有点致命的错误。依赖注入(inject)是个好主意,但不是这样的。可以理解,不同的开发人员喜欢不同的 DI 容器,这使得基于真实的 DI 容器创建示例项目有点不可行,但他们应该避免在示例项目中使用依赖注入(inject),而只是推荐使用依赖注入(inject)和可能给出了使用各种容器实现这一点的指导。

总而言之,这里唯一使用 HttpContext 的是获取 OWIN 上下文,并且仅此一项用于处理其半生不熟的 Identity 依赖注入(inject)。因此,如果您只是将自己的 UserManager 注入(inject)到您选择的 DI 容器中,您就可以移除对 HttpContext 的依赖,然后就可以开始了。

您只需要为两件事提供配置:UserManagerIUserStore。告诉您的 DI 容器如何注入(inject)它们,然后您只需在库类构造函数中添加对 UserManager 的依赖,就可以开始了。

关于c# - ASP Identity - 访问引用库上的 HttpContext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25162026/

相关文章:

javascript - 部分 View 中的 data-ng-repeat 不显示数据

c# - 使用 Json.Net 以 dd/MM/yyyy 格式反序列化日期

c# - 获取两个大列表之间的所有匹配元素

asp.net - 绘制 HTML 表格边框

Javascript pageLoad 未在母版页中执行

c# - 无法加载 configProtectedData 提供程序

asp.net - 将动态 javascript 添加到 asp.net c# + razor 中的布局,如 Page.Title

c# - 事件处理程序同步

c# - Aforge VideoCapability 列表 - 可能不完整?

c# - 如何显示打开/保存对话框 asp net mvc 4