首页 > 解决方案 > 注入自定义配置的正确方法

问题描述

要解决的问题:有一个设置列表可以说:

{
   "Kind1":
     {"attr1":"val11"},
     {"attr2":"val12"},
   "Kind2":
     {"attr1":"val21"},
     {"attr2":"val22"},       
}

而 .NET Core 2.1 中的一个消费者类(控制器),需要访问上述配置才能使用 Kind1 或 Kind2。

假设相应的类已经在 C# 中定义:

 public class KindSetting
 {
    public string attr1{get;set;}
    public string attr2{get;set;}
 }

现在将配置注入消费者对象的最佳方法是什么。

有没有办法将IConfiguration实例注入消费者对象并像这样使用它?:

KindSetting kindSetting =_configuration.GetValue<KindSetting>(kindSettingKey);

有没有更好的方法来满足上述要求?

标签: c#asp.net-coredependency-injectionconfiguration.net-core

解决方案


在 startup.cs 文件中,您可以在 ConfigureServices 方法中进行配置。下面的示例代码:

   // This method gets called by the runtime. Use this method to add services to the container.
    public void ConfigureServices(IServiceCollection services)
    {
        //Need to add following lines
        services.Configure<KindSetting>(Configuration.GetSection("Kind1"));
     }

添加到服务后,您可以在您的类中注入此配置,如下所示:

public class HomeController : Controller
{

    private readonly IOptions<KindSetting> _KindSetting;
    
    public HomeController(IOptions<KindSetting> KindSetting)
    {
        _KindSetting = KindSetting
    }
    
    public void myFunction()
    {
            var mysetting = _KindSetting.Value.attr1
    }
}

推荐阅读