gpt4 book ai didi

c# - 如何在 Autofac 中为 InstancePerRequest 服务编写单元测试(或回归测试)

转载 作者:行者123 更新时间:2023-11-30 16:44:22 26 4
gpt4 key购买 nike

过去,我从事过包含大量 Autofac 组件的复杂项目。为了检查是否可以解决所有问题,我们将编写一个单元测试来尝试解决所有必要的(顶级)组件。

但现在我第一次尝试在 ASP.NET MVC 项目中执行此操作。

我已经像这样注册了我的 ApiControllers:

builder.RegisterType<MyController>().InstancePerRequest();

我想像这样测试:

var containerBuilder = new ContainerBuilder();
foreach (var module in ModuleRepository.GetModulesForWebsite())
{
containerBuilder.RegisterModule(module);
}

var container = containerBuilder.Build();

foreach (var componentRegistryRegistration in container.ComponentRegistry.Registrations)
{
foreach (var service in componentRegistryRegistration.Services.OfType<TypedService>())
{
if (service.ServiceType.IsAssignableTo<ApiController>())
{
var implementation = container.Resolve(service.ServiceType);
implementation.Should().NotBeNull();
}
}
}

然而,这会导致这个异常:

Autofac.Core.DependencyResolutionException: Unable to resolve 
the type 'Website.APIControllers.Clean.IngredientsController'
because the lifetime scope it belongs in can't be located. The
following services are exposed by this registration:
- MyProject.MyController

有人知道我该如何优雅地解决这个问题吗?我应该伪造一个 HttpRequest 吗?我该怎么做,在哪里做?或者还有其他选择吗?

最佳答案

There are docs here on how to test per request dependencies.

根据问题中的评论线程,听起来您将每个请求的依赖关系切换到了每个生命周期范围(无论如何,这就是 ASP.NET Core 现在处理事情的方式)。

对于这个问题的 future 读者,实际上有几个选项,所以请查看文档了解更多信息。

关于c# - 如何在 Autofac 中为 InstancePerRequest 服务编写单元测试(或回归测试),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43666072/

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