【问题标题】:Test Dependency Injection scope "coherence" with xUnit使用 xUnit 测试依赖注入范围“一致性”
【发布时间】:2020-07-28 14:56:56
【问题描述】:

在 AzureFunction 中,我将一些服务注册为作用域,而将其他一些服务注册为 Singleton。 事实证明,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>();

【问题讨论】:

    标签: asp.net-core dependency-injection azure-functions dryioc


    【解决方案1】:

    您可以从服务提供者那里获得底层 DryIoc IContainerValidate 以获得单例中的强制依赖:

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

    这是用于验证的documentation

    【讨论】:

    • 它正在工作,谢谢!奇怪的是,作用域范围的依赖在我的 xunit 中注册为 ScopedOrTransient 而运行时将它们注册为 Scoped。
    • 作用域或瞬态?还是您的意思是 ScopedOrSingleton?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-17
    • 1970-01-01
    • 2018-01-27
    • 1970-01-01
    相关资源
    最近更新 更多