如何使用 XUnit 依赖构造函数注入来创建我的具体类

Gol*_*ion 8 c# dependency-injection

我获取了 xunit.DependencyInjection 包并使用我的接口创建了我的构造。测试用例可以编译,但是当我运行 xunits 时,它不会执行构造函数依赖注入。

 public class TestSuite{
  IARepository _aRepository;
  IBRepository _bRepository;
    public TestSuite(IARepository aRepository, IBRepository bRepository)
    {
        _aRepository = aRepository;
        _bRepository = bRepository;
    }
}
Run Code Online (Sandbox Code Playgroud)

GitHub 建议构造函数注入是可能的: https://github.com/pengweiqhca/Xunit.DependencyInjection/tree/master/Xunit.DependencyInjection.Test

启动.cs

 public class Startup
 {
    public void ConfigureServices(IServiceCollection services)
    {

    var configuration = new ConfigurationBuilder()
            .SetBasePath(System.IO.Directory.GetCurrentDirectory())
            .AddJsonFile("appsettings.json", false, true)
            .Build();

                    
        var connectionString =     configuration.GetConnectionString("A_DbCoreConnectionString");
        services.AddDbContext<AContext>(options1 => options1.UseSqlServer(connectionString));

        connectionString= configuration.GetConnectionString("B_DbCoreConnectionString");
        services.AddDbContext<BContext>(options2 => options2.UseSqlServer(connectionString));

        services.AddTransient<IARepository, ARepository>();
        services.AddTransient<IBRepository, BRepository>();
    }
  }
Run Code Online (Sandbox Code Playgroud)

A和B存储库.cs

public class ARepository :IARepository
{
    public AContext _dbContext; 
    public ARepository(AContext dbContext) 
    {
        _dbContext = dbContext;
    }
    ...
}

public class BRepository :IBRepository
{
    public BContext _dbContext; 
    public BRepository(BContext dbContext) 
    {
        _dbContext = dbContext;
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

Gol*_*ion 3

添加startup.cs代码后,我就可以让依赖注入在xunit中工作

XUnit 项目中的解决方案startup.cs 文件:

public class Startup
{
public void ConfigureServices(IServiceCollection services)
{

var configuration = new ConfigurationBuilder()
        .SetBasePath(System.IO.Directory.GetCurrentDirectory())
        .AddJsonFile("appsettings.json", false, true)
        .Build();

                
    var connectionString =     configuration.GetConnectionString("A_DbCoreConnectionString");
    services.AddDbContext<AContext>(options1 => options1.UseSqlServer(connectionString));

    connectionString= configuration.GetConnectionString("B_DbCoreConnectionString");
    services.AddDbContext<BContext>(options2 => options2.UseSqlServer(connectionString));

    services.AddTransient<IARepository, ARepository>();
    services.AddTransient<IBRepository, BRepository>();
  }
 }
Run Code Online (Sandbox Code Playgroud)