从控制台应用程序中的另一个类调用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}");
});
}
}
我需要在另一个类的方法中获取配置值,如下所示。我想我会需要使用依赖注入,并发送IConfigurationRoot至myClass如图这个链接,但无法弄清楚到底如何?
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));
真诚地感谢所有帮助。谢谢