使用 xUnit 测试依赖注入范围 "coherence"

Test Dependency Injection scope "coherence" with xUnit

在 AzureFunction 中,我将一些服务注册为范围服务,将其他一些服务注册为单例服务。 事实证明,Singleton 的依赖项是 Scoped 服务(一件坏事),在运行时我得到 this kind of exception.

我希望能够编写一个单元测试来检查与运行时相同的东西,但我没有成功。谁能帮帮我?

我尝试了什么:

 // Arrange
var functionStartup = new MyFunctionStartup();
var serviceCollection = new ServiceCollection();
var functionHostBuilder = A.Fake<IFunctionsHostBuilder>();
A.CallTo(() => functionHostBuilder.Services).Returns(serviceCollection);

// Act

// doing in fact under the hood:  
//  services.AddSingleton<ISingleton, Singleton>();
//  services.AddScoped<IScopedDependencyOfSingleton, ScopedDependencyOfSingleton>();
functionStartup.Configure(functionHostBuilder);


// Assert
var provider = serviceCollection.BuildServiceProvider();

var singleton = provider.GetService<ISingleton>();

您可以从服务提供商处获得底层 DryIoc IContainerValidate 获得单例中的俘虏依赖:

var container = provider.GetRequiredService<IContainer>();
var errors = container.Validate(ServiceInfo.Of<ISingleton>());
if (errors.Count > 0) 
{
    // handle errors
}

这里是 documentation 验证。