asp.net-mvc-3 - 如何将依赖项注入(inject) global.asax.cs

标签 asp.net-mvc-3 dependency-injection unity-container

如何将依赖项注入(inject) global.asax.cs,即 MvcApplication 类?

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

到目前为止,一切似乎都很简单,除了一些障碍,其中一个在 global.asax.cs 中(另一个是自定义属性,但关于 SO 的问题已经涵盖了)。

MvcApplication 类中的 HttpApplication 事件处理程序,例如:

Application_Start()
Application_EndRequest(object sender, EventArgs e)
Application_AcquireRequestState(object sender, EventArgs e)

可能需要外部依赖,例如对 ILogService 的依赖。那么如何在不诉诸服务定位器(反)模式的情况下注入(inject)它们,例如
private static ILogService LogService
{
    get
    {
        return DependencyResolver.Current.GetService<ILogService>();
    }
}

非常感谢任何帮助/建议!

最佳答案

你的 global.asax.cs 中的类是你的 Composition Root ,因此您不能(也不应该)从外部向其中注入(inject)任何东西。

但是,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");
    }
}

关于asp.net-mvc-3 - 如何将依赖项注入(inject) global.asax.cs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7752023/

相关文章:

c# - Asp Mvc 使用 Ajax 返回局部 View 不起作用

c# - 使用 EF4(edmx 模型)时偶尔出现 "The underlying provider failed on Open"错误

php - 如何将存储库注入(inject) Symfony 中的服务?

c# - 如何处理依赖注入(inject)中的构造函数变化

c# - 关于SOLID原则、使用容器和Unity的DI : How to manage the DI mapping in the container?

asp.net-mvc-3 - 将 WIF 与 asp.net MVC 3 一起使用,我在哪里定义 STS 注销端点?

asp.net-mvc-3 - 强制 ASP.NET MVC3 处理程序忽略 .cshtml 和 .vbhtml URL 并仅传递它们

c# - 如何实现 PerGraph 生活方式

javascript - 由于另一个服务注入(inject),服务无法找到依赖项

c# - 调试编辑后,Visual Studio 将有效代码误认为无效