大数跨境
0
0

Xunit.DependenecyInjection 对 HostApplicationBuilder 的支持

Xunit.DependenecyInjection 对 HostApplicationBuilder 的支持 amazingdotnet
2024-03-25
1
导读:Xunit.DependenecyInjection 对 HostApplicationBuilder 的支持

Xunit.DependenecyInjection 对 HostApplicationBuilder 的支持

Intro

Xunit.DependencyInjection 最近新增了对于 HostApplicationBuilder 的支持,我们可以使用 HostApplicationBuilder 的编程模式来注册配置和服务

Sample

只需要定义一个 ConfigureHostApplicationBuilder(IHostApplicationBuilder builder) 方法,在这个方法中注册需要的服务配置即可

Startup 示例如下:

public static class Startup
{
    public static void ConfigureHostApplicationBuilder(IHostApplicationBuilder builder)
    {
        builder.Configuration.AddInMemoryCollection(
        [
            new KeyValuePair<string, string?>("Hello""World"),
            new KeyValuePair<string, string?>("CounterInitValue""1")
        
]);
        if (Convert.ToInt32(builder.Configuration["CounterInitValue"]) > 0)
        {
            builder.Services.AddSingleton<IRandom, RandomService>();
        }
    }

    public static void Configure(IConfiguration configuration)
    {
        Counter = Convert.ToInt32(configuration["CounterInitValue"]);
    }
}

在注册服务时如果需要使用到 Configuration 就会简单很多

初始化的操作仍和之前一样,可以放在 Configure 方法中或者自定义一个 HostedService

测试示例如下:

public class HostApplicationBuilderStartupSample(IRandom random)
{
    private static int Counter;
    
    [Fact]
    public void RandomTest()
    {
        var value = random.GetValue(2);
        Assert.True(value is >= 0 and <= 2);
    }

    [Theory]
    [InlineData(null!)]
    public void ConfigurationTest([FromServices]IConfiguration configuration)
    {
        Assert.NotNull(configuration);
        Assert.Equal("World", configuration["Hello"]);
    }

    [Fact]
    public void ConfigureTest()
    {
        Assert.Equal(1, Counter);
    }
}

public interface IRandom
{
    int GetValue(int max);
}

public sealed class RandomService : IRandom
{
    public int GetValue(int max) => Random.Shared.Next(max);
}

References

  • https://github.com/WeihanLi/XunitDependencyInjection.Samples/blob/main/P5_More/MoreFeatures/HostApplicationBuilderStartupSample.cs
  • https://github.com/pengweiqhca/Xunit.DependencyInjection/blob/main/test/Xunit.DependencyInjection.Test/HostApplicationBuilderTest.cs


【声明】内容源于网络
0
0
amazingdotnet
dotnet 开发知识库,了不起的 dotnet,dotnet 奇淫怪巧
内容 539
粉丝 0
amazingdotnet dotnet 开发知识库,了不起的 dotnet,dotnet 奇淫怪巧
总阅读27
粉丝0
内容539