2016-12-15 1 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를 사용할 이유가 전혀 없을 것입니다.

도와 주셔서 감사합니다.

업데이트

내가 시작 내부 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는 작업을 직렬화 한 다음 실행시에 직렬화하여 대기열에 포함 된 논리를 호출해야합니다. 객체에 이벤트를 첨부하기 만하면이 작업을 위해 반드시 Hangfire가 필요하지는 않습니다.

예를 들어, CustomEvent는 인스턴스 속성이므로 개체의 새 인스턴스를 만들기 때문에 이벤트 연결은 의미가 없습니다. 이 인스턴스는 MyEventListener를 호출하자마자 범위를 벗어납니다. 또한, MyObject의 새로운 사용되지 않는 인스턴스에 이벤트를 첨부했지만 호출하지 않았습니다.

+0

답변 해 주셔서 감사합니다. 이미 Global.asax 또는 Startup에 Hangfire없이 코드를 넣으려고했지만 작동하지 않습니다. 내 객체를 이벤트와 어디에 배치해야합니까? 나는 그것을 항상 살아있게하고 싶다. – loqie

+0

언제 무엇을하고 싶습니까? 당신의 본보기는 이제 사건을 해고하지 않을 것입니다. 당신은 객체의 인스턴스를 만들고, 그 객체에 이벤트를 첨부하고, 다시는 결코 사용되지 않는 범위를 벗어납니다. 당신은 객체 생성자에 이벤트를 첨부 할 수 있습니다. 이벤트를 정적 속성으로 만들 수는 있지만 달성하려는 것을 이해하지 않고는 말할 수 없습니다. – reckface