Asp.net-Mvc-3
如何將依賴項注入 global.asax.cs
如何將依賴項注入 global.asax.cs,即 MvcApplication 類?
以前使用服務定位器(反)模式進行依賴注入,我試圖通過使用 IOC 容器(特別是 Unity.Mvc3,因為它帶有 IDependencyResolver 的實現)在我最新的 MVC 應用程序中遵循最佳實踐建議。框)和建構子注入。
到目前為止,一切似乎都很簡單,除了一些障礙,其中一個在 global.asax.cs 中(另一個是自定義屬性,但關於 SO 的問題已經涵蓋了)。
MvcApplication 類中的 HttpApplication 事件處理程序,例如:
Application_Start() Application_EndRequest(object sender, EventArgs e) Application_AcquireRequestState(object sender, EventArgs e)可能需要外部依賴項,例如對 ILogService 的依賴項。那麼如何在不訴諸服務定位器(反)模式的情況下注入它們,例如
private static ILogService LogService { get { return DependencyResolver.Current.GetService<ILogService>(); } }非常感謝任何幫助/建議!
global.asax.cs 中的類是您的Composition Root,因此您不能(也不應該)從外部向其中註入任何東西。
但是,MvcApplication 類只有一個實例,因此如果您需要在其中一種方法中提供服務,您可以將其聲明為成員欄位 - 例如:
public class MvcApplication : System.Web.HttpApplication { private readonly ILogService log; public MvcApplication() { this.log = new MyLogService(); } protected void Application_Start() { // ... this.log.Log("Application started"); } }