谷歌/我的大脑让我失望了。如果不使用框架(这是我永远无法通过同事了解的),那么如果您(程序员)无法控制创建实例,那么如何将依赖注入到HTTPModule中呢?
我们是要侵入定制的web.config部分+反射,还是有什么更干净的东西我没有看到?
例如,使用Karl的示例模块作为基础,并假设ILogger的实现。.Net 2.0 fwiw
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。
发布于 2009-01-14 14:45:13
我偶然发现了一个程序解决方案。完全消除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;
}有一些健康警告。您必须非常小心在何处执行这个int -- global.asax (我非常肯定Init()是正确的,但我不确定),并且模块没有添加到只读HttpApplication.Modules集合中。除此之外,效果很好。
发布于 2009-01-14 13:58:57
您可以使用非常简单的一类ioc 15分钟33线IoC集装箱。
发布于 2009-11-09 08:46:22
请看一下我对类似问题的回答:
https://stackoverflow.com/questions/442918
复制相似问题