我正在尝试将我的 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
的情况下访问 ApplicationUserManager
和 ApplicationRoleManager
,或者我如何访问 HttpContext
在这里。
非常感谢
最佳答案
实际上,我会建议一种稍微不同的方法。 Identity 团队在使用基于 OWIN 的临时依赖项注入(inject)容器引导示例时犯下了我认为有点致命的错误。依赖注入(inject)是个好主意,但不是这样的。可以理解,不同的开发人员喜欢不同的 DI 容器,这使得基于真实的 DI 容器创建示例项目有点不可行,但他们应该避免在示例项目中使用依赖注入(inject),而只是推荐使用依赖注入(inject)和可能给出了使用各种容器实现这一点的指导。
总而言之,这里唯一使用 HttpContext
的是获取 OWIN 上下文,并且仅此一项用于处理其半生不熟的 Identity 依赖注入(inject)。因此,如果您只是将自己的 UserManager
注入(inject)到您选择的 DI 容器中,您就可以移除对 HttpContext
的依赖,然后就可以开始了。
您只需要为两件事提供配置:UserManager
和IUserStore
。告诉您的 DI 容器如何注入(inject)它们,然后您只需在库类构造函数中添加对 UserManager
的依赖,就可以开始了。
关于c# - ASP Identity - 访问引用库上的 HttpContext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25162026/