2012-01-12 6 views
1

私は、クォーツスケジューラをインスタンス化するコンソールアプリケーションを持っています。
"Mother App"が特定のメソッドを呼び出すように、Jobハンドラを呼び出すようにしたいと思います。
問題は、ジョブクラスが明らかに外部クラスとかなり隔離されているようです。
私はこれを行う良い方法があると確信していますが、私はまだそれにつまずくことはありませんでした。JobをQuartz.NetでEventHandlerを発生させる方法を教えてください。

public class RestartJob : IJob 
{   
    public RestartJob() 
    { 
    } 

    public virtual void Execute(IJobExecutionContext context) 
    { 
     //Send Restart EventHandler Subscription to Console.    
    } 
} 
+0

おそらく関連する質問:http://stackoverflow.com/questions/6265022/quartz-net-trigger-event –

+0

はい、あなたは正しいです。私はそれを見た...それは一種のハッキリと聞こえた。もっと単純なものがない場合は、私はそれに行くでしょう:)しかし、私はカスタムトリガーを使用していないので、それを適応させる必要があります。 –

答えて

3

スケジューラロジックを含むクラスにシングルトンを実装することで、私の問題を解決しました。 魅力的な作品です。これが私には必要なものを解決するために他人を助けてくれることを願っています。

public class Skeduler 
{ 
    private static Skeduler instance; 

    public static Skeduler Instance 
    { 
     get 
     { 
      if (instance == null) 
      { 
       instance = new Skeduler(); 
      } 
      return instance; 
     } 
    } 

    public delegate void SendRestartX(); 
    public event SendRestartX SendRestart; 

    public void doSendRestart() 
    { 
     if (SendRestart!=null) 
      SendRestart(); 
    } 

    //(Job Methods & Logics Goes Here) 

} 

public class RestartJob : IJob 
{ 
    //Required 
    public RestartJob() 
    { 
    } 

    public virtual void Execute(IJobExecutionContext context) 
    { 
     Skeduler.Instance.doSendRestart(); 
    } 

} 

は使用方法:あなたがこの試すことができ

public MainClass 
    { 
     public void Run() 
     { 
      skeduler = Skeduler.Instance; 
      skeduler.SendRestart += new Skeduler.SendRestartX(MethodToCall); 
     } 
    } 
1

: をIJobDetailを作成します。

IJobDetail job = JobBuilder.Create<LogJob>().WithIdentity("job"), "group") 
     .UsingJobData("id", 123).Build(); 
job.JobDataMap["SOMENAME"] = this; 

使用法:

public void Execute(IJobExecutionContext context) { 
    JobDataMap dataMap = context.JobDetail.JobDataMap; 
    CLASSNAME SOMENAME = dataMap["SOMENAME"] as MediaPlaylistsAds; 
    int id = (int)dataMap["id"]; 
    SOMENAME.SOMEFUNC(id); 
} 
1

をあなたはJobDataMap内イベントハンドラを渡すことができます使用してあなたの仕事のイベントハンドラ。

あなたの仕事のクラスでは、あなたの仕事

IJobDetail job = JobBuilder.Create<RestartJob>().WithIdentity("job"), "group") 
     .SetJobData(new JobDataMap{{"event-handler", YourEventHandler}}); 

の作成:

public class RestartJob : IJob 
{   
    public RestartJob() 
    { 
    } 

    public virtual void Execute(IJobExecutionContext context) 
    { 
     var @event = context.JobDetail.JobData["event-handler"]; 
     @event?.Invoke(YourEventParameters); 
    } 
}