2016-12-15 4 views
0

私はいくつかのイベントを持つオブジェクトを持っています。例:バックグラウンドイベントASP.NET MVC

var myObject = new MyObject(); 
myObject.CustomEvent += _myEvent; 

private void _myEvent(object sender, CustomEvent e) 
{ 
    using (var db = new DbContext()) 
    { 
     db.MyEntity.Add(e.Property); 
     db.SaveChanges(); 
    } 
} 

このイベントは、アプリケーション実行中常にアクティブにする必要があります。 バックグラウンドタスクについては、Hangfireを使用します。しかし、私のイベントは解雇されませんでした。たぶん、その問題にはまったく問題がないでしょう。

ご協力いただきありがとうございます。

更新

私はスタートアップの内側Hangfireをしています。

public partial class Startup 
{ 
    public void Configuration(IAppBuilder app) 
    { 
     ModelBinders.Binders.Add(typeof(double), new DoubleModelBinder()); 
     ConfigureAuth(app); 

     GlobalConfiguration.Configuration 
     .UseSqlServerStorage("myConString"); 
     BackgroundJob.Enqueue(() => MyEventListener()); 
     app.UseHangfireServer(); 
    } 

    public void MyEventListener() 
    { 
     new MyObject().CustomEvent += delegate (object sender, CustomEvents e) 
     { 
      using (var db = new DbContext()) 
      { 
       db.MyEntity.Add(e.Property); 
       db.SaveChanges(); 
      } 
     } 
    } 
} 
+0

表示されているコードのいずれも、イベントをHangFireジョブに登録しようとしていません。 Hangfireは、何かをバックグラウンドで実行し続けるための良い解決策になりますが、実際に使用する必要があります。 – krillgar

+0

ありがとうございます。私はHangfireのコードでそれを示すために自分の投稿を編集します。 – loqie

答えて

1

Hangfireはジョブをシリアル化し、実行時にデシリアライズしてエンキューしたロジックを呼び出す必要があります。単にイベントをオブジェクトにアタッチしたいのであれば、これに必ずしもハングファイアが必要というわけではありません。

例では、カスタムイベントはインスタンスプロパティであるため、オブジェクトの新しいインスタンスを作成するため、イベントの添付は無意味です。そのインスタンスは、MyEventListenerを呼び出すとすぐに有効範囲外になります。さらに、MyObjectの未使用の新しいインスタンスにイベントをアタッチしても、そのイベントは呼び出されませんでした。

+0

ありがとうございました!私は既にGlobal.asaxやStartupにHangfireを使わずにコードを入れようとしましたが、うまくいきません。私はどこに私のオブジェクトをイベントで置きますか?私はいつもそれを生かしておきたい。 – loqie

+0

あなたはいつ何をしたいですか?今のあなたの例は、決してイベントを起こさないでしょう。オブジェクトのインスタンスを作成し、そのオブジェクトにイベントをアタッチしてから、再び使用されることはありません。あなたはオブジェクトコンストラクタでイベントをアタッチすることができます。イベントを静的なプロパティにすることはできますが、達成しようとしていることを理解することなく、私は言うことができません。 – reckface