在HttpHandler中使用IoC的Construtor/Setter Injection,是否可能?

Mat*_*att 6 dependency-injection castle-windsor mocking httphandler ioc-container

我遇到了一个相当毛茸茸的问题.可能有一个简单的解决方案,但我找不到它!

我有一个自定义HttpHandler,我想处理一个请求,记录某些信息,然后在数据库中输入详细信息.我正在使用NUnit和Castle Windsor.

所以我有两个接口; 一个用于记录另一个用于数据输入,这是构造函数注入的.我很快发现没有办法调用构造函数,因为总是调用默认的无参数构造函数.

所以我想我会使用Setter注射器让Castle windsor对它进行排序.这实际上就像我使用时一样,container.Resolve<CustomHttpHandler>();我可以检查记录器是否为空.(在Global.asax.cs中的Application_Start中)

问题是虽然Castle Windsor可以创建http应用程序没有使用它的实例??? 我认为??

基本上这样做的全部原因是能够通过模拟和单元测试单独测试记录器和数据存储库代码.

我有什么想法可以解决这个问题?

谢谢!

Mau*_*fer 2

不可能,至少不可能直接。IHttpHandler 对象由 ASP.NET 运行时实例化,并且不允许 Windsor 参与其创建。您可以:

  • 通过使用容器作为服务定位器来拉取依赖项。
  • 设置一个基本处理程序,用于创建、注入并委托给您自己的处理程序(请参阅Spring 是如何做到的
  • 使用容器作为处理整个请求的另一个服务的服务定位器(如saret 所解释的