2011-03-13 55 views
2

我設置Ninject在ASP.NET MVC3喜歡這裏解釋Using Binaries from GithubQuartz.NET與Ninject

現在我想設置Quartz.NET,但Ninject實現永遠不會執行我的工作。在我實施Ninject之前,我的工作按預期執行。爲什麼?那麼解決方案是什麼?

謝謝你的幫助! :)

public class MvcApplication : NinjectHttpApplication 
{ 
    (...)  
    protected override IKernel CreateKernel() 
    { 
     var kernel = new StandardKernel(); 
     kernel.Load(System.Reflection.Assembly.GetExecutingAssembly()); 

     kernel.Bind<IUploadRepository>().To<UploadRepository>(); 
     kernel.Bind<StocksDB>().To<StocksDB>().InRequestScope(); 

     return kernel; 
    } 

    protected override void OnApplicationStarted() 
    { 
     base.OnApplicationStarted(); 

     AreaRegistration.RegisterAllAreas(); 
     RegisterGlobalFilters(GlobalFilters.Filters); 
     RegisterRoutes(RouteTable.Routes); 

     // Quartz.NET scheduler 
     var factory = new Quartz.Impl.StdSchedulerFactory(); 
     var scheduler = factory.GetScheduler(); 
     scheduler.Start(); 

     // construct job info 
     var jobDetail = new Quartz.JobDetail("myJob", null, typeof(DumbJob)); 
     var trigger = new Quartz.SimpleTrigger("myTrigger", null, DateTime.UtcNow, null, Quartz.SimpleTrigger.RepeatIndefinitely, TimeSpan.FromMinutes(5));    
     scheduler.ScheduleJob(jobDetail, trigger);    
    } 
} 
+0

不確定,但您可能應該使用NuGet將當前的Ninject.MVC3代碼添加到您的項目中。它使用Web.Activator,不再需要你從NinjectHttpApplication派生 - 我懷疑這是你的問題。 – tvanfosson 2011-03-13 14:56:26

+0

謝謝你的建議!但是,我使用的是Visual Studio Express,如果我沒有錯,NuGet是Visual Studio的擴展。 – 2011-03-13 18:57:04

+0

看起來仍然如此,但他們有計劃在未來支持更多的Express版本(支持VS Web Dev Express)。 – tvanfosson 2011-03-13 19:08:12

回答

1

這不是一個Ninject相關的問題。你只是忘記保留對調度程序的引用。立即在OnApplicationStarted後收集垃圾。

+0

這是否解決了您的問題? – 2011-04-01 15:02:11

+0

@David @Remo gloor:Remo你應該包含一個'@ David',這樣遲到的跟蹤者將會更快地被提醒。其他評論像這樣只能被忠誠的追隨者看到! – 2011-04-01 19:51:23

+0

@Ruben Bartelink:謝謝你的信息。我不知道那 – 2011-04-01 22:08:04

0

您需要爲quartz.net編寫您自己的Ninject ISchedulerFactory。

默認工廠將創建新的DumbJob()。我相信你正試圖在DumbJob中注入一些東西,所以你需要在你自己的調度器工廠中用ninject創建DumbJob的實例。

此外,您可以在該工廠使用mvc3 ninject內核。

+0

Remo提到的問題顯然是一個問題,但看着你的代碼看起來應該至少在它被垃圾收集之前發射一次,因爲它現在正在發射。 – mamu 2011-04-08 02:26:42