【问题标题】:Replace the injected HttpContext for class in application为应用程序中的类替换注入的 HttpContext
【发布时间】:2023-02-09 16:01:42
【问题描述】:

我正在使用 xunit、respawn 和 webapplicationfactory 为 mediatr 处理程序设置一些集成测试....

正在测试的 mediatr 处理程序最终调用的类之一.. 具有对 IHttpContextAccessor 的依赖性,如下所示

我觉得我已经设置了我想要正确注入的“替换”单例,如下所示:

但是当集成测试运行时.. httpContextAccessor 不为空,但 HttpContext 始终为空。

我已经尝试了大约 600 万件事 :( 非常悲伤。

如何让 IHttpContextAccessor 正确解析为我在 ConfigureServices 中设置的内容?

【问题讨论】:

    标签: asp.net-core dependency-injection asp.net-core-3.1 httpcontext mediatr


    【解决方案1】:

    当集成测试运行时.. httpContextAccessor 不为空,但 HttpContext 始终为空。如何让 IHttpContextAccessor 正确解析为我的内容 在配置服务中设置?

    不,我们不能,HttpContext 将仅在请求范围内可用,因为 ConfigureServices 在构造 Startup 之前调用,因此如果我们尝试注入,它将通过异常,即使我们在该场景中声明全局变量,它也将始终为 null。应用程序启动只发生一次,并且在收到任何请求之前很久。

    因此,ConfigureServices 在任何 httprequest 到达应用程序之前运行一次。如果我们强行尝试在请求生命周期之外调用它,它将始终以 NullReferenceException 结束。你可以get more details in the official document.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-26
      • 1970-01-01
      • 2018-12-09
      • 2012-02-06
      • 1970-01-01
      • 2023-03-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多