Get UserManager from Hangfire Job

本文关键字:Job Hangfire from UserManager Get | 更新日期: 2023-09-27 18:13:30

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

代码:

HttpContext.Current.GetOwinContext()

将失败并产生错误。根据hangfire文档,我创建了一个授权过滤器,可以成功地附加到OwinContext,但是我似乎无法找到一种方法来在hangfire任务中做到这一点。

我还尝试了以下方法:

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

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

Get UserManager from Hangfire Job

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

在这个userManager上做你想做的。

注意

使用这个技巧时要小心,你必须确保你的代码不会使用不同的UserManager实例来更新(user)。例如:

/* 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);