过去,我曾经处理过包含大量 Autofac 组件的复杂项目。为了检查是否所有必要的(顶层)组件都能被解析,我们会编写一个单元测试来尝试解析它们。
但是现在我正在尝试在 ASP.NET MVC 项目中实现这一点。
我通过以下方式注册了我的 ApiControllers:
然而,这会导致以下异常情况:
但是现在我正在尝试在 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吗?如果是,我该在哪里和如何实现?还是有其他选择?
InstancePerLifetimeScope
选项。随意将其添加为答案并获得甜蜜的声望分数。 - Peter