這個問題Ninject Dependency Injection in MVC3 - Outside of a Controller與我正在經歷的接近,但並不完全。在MVC3控制器之外調用Ninject時,HttpContext爲null
我有一個ASP.NET MVC3網站使用Ninject 3,它奇妙的構造函數注入。我的所有依賴項都已解決,包括那些通過HttpContext.Current傳遞的依賴項。
我的問題是,在global.asax中,我啓動了一個TaskManager類,該類定期對定時器執行一些任務。在任務管理器類中,我沒有控制器,所以如果我需要訪問我的一個依賴(像我的錯誤日誌服務),我使用有權限訪問內核對象的靜態包裝類:
var logger = MyContainer.Get<ILoggingService>();
logger.Error("error doing something...", ex);
.Get方法只執行一個內核。獲取調用來解析我的依賴關係。每次我在其他依賴項上使用此方法時都很好用。然而,ILoggingService有一個名爲MyWebHelper的依賴項,通過它的構造函數注入,並在其構造函數中包含HttpContext。
public class DefaultLogger : ILoggingService
{
public DefaultLogger(IRepository<Log> logRepository, IWebHelper webHelper)
{
_logRepository = logRepository;
_webHelper = webHelper;
}
}
public class MyWebHelper : IWebHelper
{
public MyWebHelper(HttpContext httpContext)
{
_httpContext = httpContext;
}
}
在我的網站的其餘部分,這是因爲所有的依賴注入我的MVC控制器的所有工作得很好。但是,如果我手動調用我的靜態包裝類來以這種方式獲得我的依賴關係,那不起作用。我得到的錯誤:
Error activating HttpContext using binding from HttpContext to method
Provider returned null.
所以,它不給我一個HttpContext,就像它在我的MVC應用程序的其餘部分一樣。我希望這是有道理的,我不是一個ninject專家還,但我想...
謝謝你的留言!我正在執行的任務主要是清理類型任務和發送已排隊的電子郵件。 NopCommerce做了非常相似的事情,這是我的想法。他們非常簡短。我理解關於HttpContext的評論。當然,這是不可用的:)我的解決方法是創建另一個版本的ILoggingService,沒有注入包括HttpContext.Current的依賴關係。如果它在發現空HttpContext時不會炸燬它,那將是非常棒的。 – ScottG