3

Google/MyBrain 让我失望了。如果不使用框架(我永远无法超越我的同事),鉴于您(程序员)无法控制创建实例,您如何将依赖项注入 HTTPModule?

我们是在破解自定义 web.config 部分 + 反射,还是有一些我没有看到的更干净的东西?

例如,使用 Karl Seguin 的示例模块作为基础,并假设实现了 ILogger。.Net 2.0 固件

public class ErrorModule : IHttpModule
{
    private ILogger injectedLogger; //how to set this?

    public void Init(HttpApplication application)
    {
        application.Error += (new EventHandler(this.application_Error));
    }

    public void Dispose() { /* required by IHttpModule */ }

    private void application_Error(object sender, EventArgs e)
    {
        this.injectedLogger.doStuff(e.ExceptionObject as Exception);
    }
}

正是这样的事情让我意识到我是多么鄙视 MSDN。

4

3 回答 3

5

我偶然发现了一个程序化解决方案。完全消除 web.config 引用,如果您小心生命周期,您可以将模块添加到 global.asax。

在 global.asax 中添加:

public static ErrorModule myErrorModule;

public override void Init()
{
    base.Init();
    myErrorModule = new ErrorModule(new LogImplementer());
    myErrorModule.Init(this);
}

其中“LogImplementer”实现了 ILogger,只需在 httpmodule 中添加一个构造函数:

public ErrorModule(ILogger injected)
{
    this.Logger = injected;
}

有一些健康警告。您必须非常小心在 global.asax 中执行此操作的位置(我很确定 Init() 是正确的,但我不确定)并且该模块未添加到只读 HttpApplication.Modules 集合中. 除此之外,工作精美。

于 2009-01-14T14:45:13.073 回答
0

你可以在 15 分钟 33 行中使用一个非常简单的一类 ioc一个 IoC 容器

于 2009-01-14T13:58:57.333 回答
0

请在此处查看我对类似问题的回答:

将 IoC 依赖注入自定义 HTTP 模块 - 如何?(ASP.NET)

于 2009-11-09T08:46:22.720 回答