簡體   English   中英

如何在asp.net核心中獲取IConfiguration的實例?

[英]How to get an instance of IConfiguration in asp.net core?

我做一個單元測試項目來測試我的webapi,我需要初始化一個控制器,問題是在構造函數中它收到一個IConfiguration,它是通過依賴注入提供的,並且工作正常。

但是當我想手動初始化它時,我無法得到這個實例。

我試圖從同一個項目中的單元測試項目初始化它。

控制器看起來像:

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

我可能應該從.Net Core應用程序的聲明開始,你不應該將IConfiguration實例傳遞給你的控制器或其他類。 您應該使用通過IOptions<T>注入的強類型設置。 有關更多詳細信息,請參閱此文章: ASP.NET Core中的選項模式

使用選項模式時,您將獲得控制器所需設置的POCO。 然后將此設置對象注入到包含在IOptions<T>控制器中:

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;
    }
}

然后從單元測試中傳遞您想要的任何設置非常簡單。 只需填充設置實例並使用任何可用的模擬框架(如MoqNSubstitute)包裝到IOptions<T>

[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);

    //  ...
}

有時需要使用項目的實際配置,例如在開發集成測試時。 在這種情況下,您可以創建ConfigurationBuilder實例並使用與測試代碼中相同的配置源填充它:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM