Google / MyBrain让我失望。如果不使用框架(我永远不会通过我的同事),如果您(程序员)无法控制创建实例,那么如何将依赖注入HTTPModule?
我们是否正在攻击自定义的web.config部分+反射或者是否有更清洁的东西我没有看到?
e.g。使用Karl Seguin的example模块作为基础,并假设实现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。
答案 0 :(得分: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集合中。除此之外,工作得非常好。
答案 1 :(得分:0)
你可以使用一个非常简单的单一类ioc An IoC Container In 15 Minutes and 33 Lines
答案 2 :(得分:0)