gpt4 book ai didi

dependency-injection - 在 HttpHandler 中使用 IoC 进行构造函数/ setter 注入(inject),这可能吗?

转载 作者:行者123 更新时间:2023-12-04 15:27:39 25 4
gpt4 key购买 nike

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

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

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

所以我想我会使用 Setter 注入(inject),让 CaSTLe windsor 来解决。这实际上就像我使用 container.Resolve<CustomHttpHandler>(); 时一样。我可以检查记录器是否不为空。 (在 Global.asax.cs 的 Application_Start 中)

问题是尽管 CaSTLe Windsor 可以创建 http 应用程序不使用它的实例???我认为??

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

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

谢谢!

最佳答案

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

  • 通过将容器用作服务定位器来拉取依赖项。
  • 设置一个基本处理程序,它创建、注入(inject)和委托(delegate)给您自己的处理程序(参见 Spring does it 的方法)
  • 将容器用作处理整个请求的另一个服务的服务定位器(如 saret explained )
  • 关于dependency-injection - 在 HttpHandler 中使用 IoC 进行构造函数/ setter 注入(inject),这可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3518851/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com