我有以下代码。
IConfigurationRoot config = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("config.json", true, true)
.Build();
string beep = config.GetSection("beep").Value;
我的 config.json 看起来像这样。
{ "beep": "bopp" }
当我遇到断点时,我可以看到有一个提供程序,但是其中的数据长度为零。我尝试了 config [“ beep”] 等其他方法,但是无法获取值。它一直都是 null 。我正在尝试遵循the docs,但必须缺少某些内容。
答案 0 :(得分:1)
我觉得您只是缺少对象的名称。
尝试像这样在config.json中为对象添加名称:
{"beep":{"beep":"bopp"}}
然后您可以string beep =config.GetSection("beep").Value
答案 1 :(得分:1)
确保按照this blog中的讨论将json文件设置为复制到目录。否则,当您构建或调试配置文件时,将不会包含该文件。确保您在属性中进行了更改。
之所以无法访问您的配置,是因为IConfigurationRoot
没有引用ConfigurationBuilder
的依赖关系。为确保您的配置内容能够加载,请按照以下步骤进行操作:
public static class ConfigurationProvider
{
public static IConfiguration BuildConfiguration => new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", true, true)
.Build();
}
以上内容将构建我们的配置,现在我们应该使用该配置。
public static class ServiceProvider
{
public static IServiceProvider BuildServiceProvider(IServiceCollection services) => services
.BuildDependencies()
.BuildServiceProvider();
}
定义了提供程序后,我们可以执行以下操作,以便可以在应用程序中传递IConfiguration
来访问对象。
var serviceCollection = new ServiceCollection()
.AddSingleton(configuration => ConfigurationProvider.BuildConfiguration());
var serviceProvider = ServiceProvider.BuildServiceProvider(serviceCollection);
然后在另一个类中,您将具有以下内容:
public class SampleContext : ISampleRepository
{
private readonly string dbConection;
public SampleContext(IConfiguration configuration) => configuration.GetConnectionString("dbConnection");
...
}
然后我们的appsettings.json
如下所示:
{
"ConnectionStrings": {
"dbConnection": "..."
}
}
以上是json对象的正确格式。如果沿这些行有嵌套对象:
{
"Sample" : {
"Api" : {
"SampleGet" : "..."
}
}
}
那么您的C#为:
configuration.GetSection("Sample:Api")["SampleGet"];
以上内容是基于您的配置和使用情况不在同一顺序区域中(即直接在您的主区域中)的假设。另外,您应该使用appsettings.json
,因为这是默认设置,如果我没记错的话,可以减少额外的接线。您的json也需要正确格式化。
但是,如果您需要更多帮助,请务必告诉我,我可以向您发送一些示例控制台核心应用程序以演示用法。