从控制台应用程序中的另一个类调用appsettings.json数据

c#

以下是Microsoft 文档中的示例代码,显示了如何在控制台应用程序中使用 appsettings.json:

using System;
using System.Threading.Tasks;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Hosting;

namespace ConsoleJson.Example
{
    class Program
    {
        static async Task Main(string[] args)
        {
            using IHost host = CreateHostBuilder(args).Build();

            // Application code should start here.

            await host.RunAsync();
        }

        static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureAppConfiguration((hostingContext, configuration) =>
                {
                    configuration.Sources.Clear();

                    IHostEnvironment env = hostingContext.HostingEnvironment;

                    configuration
                        .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
                        .AddJsonFile($"appsettings.{env.EnvironmentName}.json", true, true);

                    IConfigurationRoot configurationRoot = configuration.Build();

                    TransientFaultHandlingOptions options = new();
                    configurationRoot.GetSection(nameof(TransientFaultHandlingOptions))
                                     .Bind(options);

                    Console.WriteLine($"TransientFaultHandlingOptions.Enabled={options.Enabled}");
                    Console.WriteLine($"TransientFaultHandlingOptions.AutoRetryDelay={options.AutoRetryDelay}");
                });
    }
}

我需要在另一个类的方法中获取配置值,如下所示。我想我会需要使用依赖注入,并发送IConfigurationRootmyClass如图这个链接,但无法弄清楚到底如何?

using System;
using System.Threading.Tasks;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Hosting;

namespace ConsoleJson.Example
{
    class Program
    {
        static void Main(string[] args)
        {
            using IHost host = CreateHostBuilder(args).Build();

            IDatabase db = xyz.GetDatabase();

            ConfigureServices.Initialize(db);
        }

        static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureAppConfiguration((hostingContext, configuration) =>
                {
                    configuration.Sources.Clear();

                    IHostEnvironment env = hostingContext.HostingEnvironment;

                    configuration
                        .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
                        .AddJsonFile($"appsettings.{env.EnvironmentName}.json", true, true);

                    IConfigurationRoot configurationRoot = configuration.Build();

                    TransientFaultHandlingOptions options = new();
                    configurationRoot.GetSection(nameof(TransientFaultHandlingOptions))
                                     .Bind(options);

                    
                });
    }

    class ConfigureServices
    {   public static void Initialize(IDatabase db)
        {
             Console.WriteLine($"TransientFaultHandlingOptions.Enabled={options.Enabled}");
             Console.WriteLine($"TransientFaultHandlingOptions.AutoRetryDelay={options.AutoRetryDelay}");

        }
    }
}

因此,我需要从中获取值appsettings.json并在我的 Initialize 方法中使用它们。我可以通过对值进行硬编码来使用其余的代码。

我尝试在 ConfigureAppConfiguration 之后添加以下行,但无法识别 configurationRoot

.ConfigureServices((_, services) =>services.AddSingleton<IConfigurationRoot>(configurationRoot));

真诚地感谢所有帮助。谢谢

以上是从控制台应用程序中的另一个类调用appsettings.json数据的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>