如何从 Program.cs 文件中的 appsettings.json 文件访问数据库连接字符串

How to access database connection string from appsettings.json file in Program.cs file

在我的 Program.cs 文件中,我目前有以下内容:

class Program
{
    static async Task Main(string[] args)
    {
        var serviceHost = new HostBuilder();
        serviceHost.ConfigureAppConfiguration(cb =>
        {
            cb.AddJsonFile("appsettings.json", false);
        });

        serviceHost.ConfigureServices(sc =>
        {
            // add all my services ...

            sc.AddDbContext<DiagnosticDbContext>(db =>
                db.UseSqlServer("Server=(localdb)\mssqllocaldb;Database=ResultsDatabase;Integrated Security=True",
                    options => options.EnableRetryOnFailure(5)));
        });

       await serviceHost.RunConsoleAsync();
    }
}

In my appsettings.json file I have the connection string: 

"ConnectionStrings":{ "DbContext": "Server=(localdb)\mssqllocaldb;Database=ResultsDatabase;Integrated Security=True" },


Is there a way for me to not have to write the entire connection string in my Program.cs file, and instead just refer to "ResultsDatabase" from my appsettings.json file? I have looked at other Stack Overflow articles but most of them talk about the Startup.cs file but I'm looking for it outside of this. If anyone could point me in the right direction that would be great. I am using .Net core

您可以使用 Configuration 属性 of HostBuilderContext class 获取连接字符串。因此,您需要使用 ConfigureServices 的重载来帮助您注入 HostBuilderContext 的实例,如下所示:

serviceHost.ConfigureServices((hc, sc) =>
{
    sc.AddDbContext<DiagnosticDbContext>(db => 
        db.UseSqlServer(hc.Configuration.GetConnectionString("DbContext"), 
        options => options.EnableRetryOnFailure(5))
    );
});