从Hangfire Job获取UserManager

时间:2016-10-17 09:28:20

标签: c# owin hangfire

我正在使用Hangfire来运行后台作业,这是我希望能够发送电子邮件的其中一项工作的一部分。我想在我的应用程序的其余部分使用我的机制,即使用UserManager.SendMailAsync。我遇到的困难是能够在hangfire任务中创建对OwinContext或UserManager的引用。

代码如:

HttpContext.Current.GetOwinContext()

只会因错误而失败。根据hangfire文档,我创建了一个可以成功附加到OwinContext的授权过滤器,但是我似乎找不到在hangfire任务中执行此操作的方法。

我也尝试了以下内容:

 var context = new OwinContext();
            var aaa = context.GetUserManager<ApplicationUserManager>();

我永远无法获得对用户管理器的引用

1 个答案:

答案 0 :(得分:2)

var userManager = new ApplicationUserManager(
    new UserStore<ApplicationUser>(new ApplicationDbContext()));

然后在userManager上做你想做的事。

注意

使用此技巧时要小心,您必须确保您的代码不会使用不同的UserManager实例进行更新(用户)。例如:

/* Wrong demonstration */

var userManagerA = new ApplicationUserManager(new UserStore<ApplicationUser>(new ApplicationDbContext()));
var userFormA = userManagerA.FindByName(User.Identity.Name);
userFormA.EmailConfirmed = false;
// some stuff ...

var userManagerB = new ApplicationUserManager(new UserStore<ApplicationUser>(new ApplicationDbContext()));
// Will product a Exception from EntityFramework
userManagerB.Update(userFormA);