Asp.net-Mvc-3

如何將依賴項注入 global.asax.cs

  • October 13, 2011

如何將依賴項注入 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");
   }
}

引用自:https://stackoverflow.com/questions/7752023