我正在使用ASP.NET MVC 5,Ninject 3.我可以向MvcApplication注入某些東西嗎?
我想在網站啓動時運行一些代碼,這會從數據庫中提取一些內容。我已經建立了注射,並且在項目的其他地方工作正常。
我改變了Global.asax
文件看起來像這樣...
[Inject]
public VoucherCompanyServiceLogicInterface VoucherCompanyServiceLogic { get; set; }
protected void Application_Start() {
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
VoucherCompany vc = VoucherCompanyServiceLogic.GetByID(1, 1);
}
...但VoucherCompanyServiceLogic
屬性始終爲空。我從另一個類中複製了這兩行(Inject
屬性和屬性聲明),他們工作正常。
我把一些Debug.WriteLine
語句這種方法,並在NinjectWebCommon
類的RegisterServices
方法,我可以看到,正在註冊的服務之前,我嘗試使用這一個,所以這不是問題。
任何人都知道爲什麼這總是空?
偉大的問題。它是空的,因爲Ninject在應用程序生命週期中的那一點沒有活動。你需要稍微反思一下你的方法。我不太瞭解Ninject給你一個完整的答案。 –
你應該有一個NinjectWebCommon文件或類似的東西,找出它的運行時間,正如Rowan Freeman指出的那樣,它可能還沒有開始,這意味着它現在無法注入你需要的東西。您應該可以在打電話之前啓動它。 –
感謝您的回覆,但是如果您閱讀了我的問題的倒數第二段,您會發現我已經說過Ninject的東西已經運行在Application_Start代碼之前。正如接受的答案中指出的那樣,問題是Ninject沒有參與創建MvcApplication對象,因爲它是由ASP.NET本身創建的。不管怎麼說,還是要謝謝你。 –