0

我需要将 appsettings.json 中的自定义设置读取到定义了自定义接口的 POCO 对象中。此代码有效 - 但有更好的方法吗?也许类似于通过 services.Configure 和 IOptions 读取选项?不幸的是,使用 IOptions 是不可能的,因为我正在调用另一个库,该库需要一个实现“IConfigOptions”接口的对象。

services.AddSingleton<IConfigOptions>(obj => new ConfigOptions        
{
   Param1 = Configuration["Options:Param1"],
   Param2 = Configuration["Options:Param2"],
   Param3 = Configuration["Options:Param3"],
   <etc>
});

建议?

4

3 回答 3

0

那样的?

 var config = new MailConfiguration();
   _configuration.Bind("Outbox.Email", config);
   

  "Outbox.Email": {
    "smtp": "smtp.com",
    "port": 587,
    "user": "user@user.com",
    "from": "user name",
    "password": "669855,",
  },
于 2021-07-02T18:05:10.143 回答
0

C# 中有一个方法,Configuration它会自动从 appsettings 中为您读取所有属性。

如果对象的属性与 JSON 中的名称匹配,则可以执行以下操作:

services.AddSingleton<IConfigOptions,ConfigOptions>(_ =>
              Configuration
                  .GetSection(nameof(ConfigOptions))
                  .Get<ConfigOptions>());

appsettings.json 看起来像:

  "ConfigOptions": {
      "Param1": "text1",
      "Param2": "text2",
      "Param3": "text3"
  }

ConfigOptions 如下所示:

public class ConfigOptions {
     public string Param1 { get; set; }
     public string Param2 { get; set; }
     public string Param3 { get; set; }
}
于 2021-07-02T18:11:02.263 回答
0

例如,在 startup.cs 文件中,您应该具有配置属性

   public IConfiguration Configuration { get; }

之后您可以编写以下内容:

var modelConfiguration = Configuration
                .GetSection("Section")
                .Get<YourModel>();
            services.AddSingleton(modelConfiguration );

"Section" :表示 app.settings.json 文件中的部分

YourModel :表示在 app.settings 部分中充当参数容器的类

services.AddSingleton(modelConfiguration ):使用 DI 使其可访问

于 2021-07-02T19:38:12.153 回答