作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
过去,我从事过包含大量 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/
我是一名优秀的程序员,十分优秀!