C# 如何在asp.net core中获取IConfiguration实例?

C# 如何在asp.net core中获取IConfiguration实例?,c#,unit-testing,dependency-injection,asp.net-core,.net-core,C#,Unit Testing,Dependency Injection,Asp.net Core,.net Core,我正在做一个unittesting项目来测试我的webapi,我需要初始化一个控制器。问题是,在构造函数中,它接收到一个IConfiguration,它是由依赖项注入提供的,并且工作正常 但当我想手动初始化它时,我没有办法得到这个实例 我试图从同一个项目内部的unittest项目初始化它 控制器看起来像: public Controller(IConfiguration configuration) { _configuration = configuration; } 我可能应该从以下语句开

我正在做一个unittesting项目来测试我的webapi,我需要初始化一个控制器。问题是,在构造函数中,它接收到一个IConfiguration,它是由依赖项注入提供的,并且工作正常

但当我想手动初始化它时,我没有办法得到这个实例

我试图从同一个项目内部的unittest项目初始化它

控制器看起来像:

public Controller(IConfiguration configuration) { _configuration = configuration; }

我可能应该从以下语句开始:在.Net核心应用程序中,不应将
IConfiguration
的实例传递给控制器或其他类。您应该使用通过
IOptions
注入的强类型设置。有关更多详细信息,请参阅本文:

当使用选项模式时,您将拥有控制器所需设置的POCO。然后将此设置对象注入到封装在
IOptions
中的控制器中:


ConfigurationBuilder来自哪个命名空间?找到它,它是Microsoft.Extensions.Configuration.Json
public class ControllerSettings
{
    public string Setting1 { get; set; }

    public int Setting2 { get; set; }

    // ...
}

public class Controller
{
    private readonly ControllerSettings _settings;

    public Controller(IOptions<ControllerSettings> options)
    {
        _settings = options.Value;
    }
}
[TestMethod]
public void SomeTest()
{
    var settings = new ControllerSettings
    {
        Setting1 = "Some Value",
        Setting2 = 123,
    };

    var options = new Mock<IOptions<ControllerSettings>>();
    options.Setup(x => x.Value).Returns(settings);

    var controller = new Controller(options.Object);

    //  ...
}
IConfigurationBuilder configurationBuilder = new ConfigurationBuilder();
// Duplicate here any configuration sources you use.
configurationBuilder.AddJsonFile("AppSettings.json");
IConfiguration configuration = configurationBuilder.Build();