【问题标题】:Get UserManager from Hangfire Job从 Hangfire 作业中获取 UserManager
【发布时间】:2016-10-17 09:28:20
【问题描述】:

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

代码如下:

HttpContext.Current.GetOwinContext()

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

我还尝试了以下方法:

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

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

【问题讨论】:

    标签: c# owin hangfire


    【解决方案1】:
    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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-05-20
      • 2019-01-17
      • 1970-01-01
      • 1970-01-01
      • 2021-12-18
      • 1970-01-01
      • 2018-02-23
      • 1970-01-01
      相关资源
      最近更新 更多