2016-10-17 20 views
3

私は電子メールを送信できるジョブの1つとして、バックグラウンドジョブを実行するためにHangfireを使用しています。残りのアプリケーションで使用するメカニズム、つまりUserManager.SendMailAsyncを使用したいと思います。私が持っている難しさは、ハングファイアタスクの中でOwinContextまたはUserManagerへの参照を作成できることです。以下のようなHangfireのジョブからUserManagerを取得

コード:

HttpContext.Current.GetOwinContext() 

だけエラーで失敗します。ハングファイアのドキュメントでは、私はOwinContextに正常にアタッチできる認証フィルタを作成しましたが、ハングファイアタスクの中でこれを行う方法は見つけられないようです。

私はまた、次のことを試してみた:

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

私はあなたがこのuserManagerにやりたい次に、ユーザーマネージャに

答えて

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

を参照を取得することはできません。

NOTE

使用このトリックは、あなたのコードを更新するために、(ユーザーが)異なるの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); 
関連する問題