gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 13:37:09 25 4
gpt4 key购买 nike

我正在尝试将我的 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/

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