c# - 无法从 .NET Core 2 控制台应用程序中的 config.json 读取数据
问题描述
我有以下代码。
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"]等,但似乎无法获取值。它一直为空。我正在尝试关注文档,但一定遗漏了一些东西。
解决方案
确保 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 也需要正确格式化。
但这肯定会奏效,如果您需要更多帮助,请告诉我,我可以向您发送一些示例控制台核心应用程序来演示用法。
推荐阅读
- excel - 由于禁用了宏,因此无法在 xlam 文件中运行公共模块
- install4j - 如果单击“提取”对话框上的“取消”,则提取目录未清理
- solidity - 不能在合约中声明 bytes32 固定数组或 bytes32 不固定数组?
- android - 如何在没有 google play 服务的情况下在 android AOSP 中使用 FaceDetectionAPI?
- javascript - 当我使用 loadDataWithBaseURL 时 webView.loadUrl 不起作用
- python - 我需要知道为什么 SCI 总是以 0 结尾
- bash - 获取子目录大小的更好方法
- python - Pygame 鼠标点击 | 在音乐播放中切换播放暂停
- c++ - 为什么`const T&`不确定是const?
- python - 如何在分配前解决局部变量“密码”引用