簡體   English   中英

在 .NET 6 控制台應用程序中讀取 appsettings.json 文件

[英]Reading appsettings.json file in .NET 6 console app

如何從appsettings.json 6 控制台應用程序中的 appsettings.json 文件獲取設置?

program.cs文件:

public class Program
{
    private static ManualResetEvent _quitEvent = new ManualResetEvent(false);
    
    private static void Main(string[] args)
    {
        // Setup Host
        var host = CreateDefaultBuilder().Build();
    
        host.Run();
    }
    
    private static IHostBuilder CreateDefaultBuilder()
    {
        return Host.CreateDefaultBuilder()
                   .ConfigureAppConfiguration(app =>
                    {
                        app.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true);
                    })
                   .ConfigureServices(services =>
                    {
                        // this is the line that has the issue
                        services.Configure<MailSettings>(services.Configuration.GetSection("MailSettings"));
                    });
    }
}

上面的行拋出一個錯誤:

錯誤 CS1061
“IServiceCollection”不包含“Configuration”的定義,並且找不到接受“IServiceCollection”類型的第一個參數的可訪問擴展方法“Configuration”(是否缺少 using 指令或程序集引用?)

如何正確配置?

您可能打算使用傳入具有Configuration屬性的HostBuilderContext參數的委托:

.ConfigureServices((context, services) => // accept context parameter
{
    services.AddSingleton<IMailService>();
    services.Configure<MailSettings>(context.Configuration.GetSection("MailSettings"));
});

首先,從 NuGet 安裝Microsoft.Extensions.Configuration package。

Microsoft.Extensions.Configuration 包

現在寫一個這樣的方法:

private static IConfiguration GetConfig()
{
    var builder = new ConfigurationBuilder()
                 .SetBasePath(Directory.GetCurrentDirectory())
                 .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);
    return builder.Build();
}

假設您的appsettings.json文件如下所示:

appsettings.json 文件

現在從 Main 方法獲取appsettings.json值:

public static void Main(string[] args)
{
    var config = GetConfig();
    // Read DB connection
    string connectionString = config.GetConnectionString("Default")
    // Read other key value
    string baseUri = config.GetSection("SomeApi:BaseUrl").Value;
    string token = config.GetSection("SomeApi:Token").Value;
}

希望你能享受編碼。

暫無
暫無

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

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