如何将依赖项注入到global.asax.cs中

如何将依赖关系注入到global.asax.cs中,即MvcApplication类?

之前使用服务定位器(反)模式进行依赖注入,我试图通过使用IOC容器(特别是Unity.Mvc3,因为它带有一个IDependencyResolver的实现,在我的最新MVC应用程序中遵循最佳实践建议)盒)和构造函数注入。

到目前为止,一切看起来都非常直截了当,除了一些障碍,其中一个在global.asax.cs中(另一个是针对自定义属性,但对于覆盖该属性还有一个问题)。

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中的类是组合根,因此您不能(也不应该)从外部注入任何东西。

然而,只有一个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");
    }
}
链接地址: http://www.djcxy.com/p/82271.html

上一篇: How to inject dependencies into the global.asax.cs

下一篇: Google Guice vs. PicoContainer for Dependency Injection