ASP身份-在参考库上访问HttpContext



我正试图将我的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
    }
}

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

Thanks to lot

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

话虽如此,HttpContext在这里的唯一作用是获取OWIN上下文,而这仅仅是用来处理他们对Identity的不成熟的依赖注入。所以,如果你只是用你选择的DI容器注入你自己的UserManager,你就去掉了对HttpContext的依赖,你就可以开始了。

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

实际上我可以这样访问它:

public static void InitializeIdentityForEF(IdentityDbContext db)
{
    var userManager = new ApplicationUserManager(new ApplicationUserStore(db));
    var roleManager = new ApplicationRoleManager(new ApplicationRoleStore(db));
}

相关内容

  • 没有找到相关文章

最新更新