如何配置自定义配置对象

时间:2018-10-19 16:21:13

标签: c#

我正在尝试注册自定义配置对象,但无法弄清楚如何对其进行配置。我尝试使用ServiceCollection.Configure <>(),但得到

  

无法从“ System.Configuration.ConfigurationSection”转换为   'System.Action'

LCToolsConfig.cs

namespace LC.Assets.Core.Utility.Config
{
    public interface ILCToolsConfig
    {
        int SiteId { get; set; }
        IShopsConfig Shops { get; set; }
        ISiteConfig Site { get; set; }
    }

    public class LCToolsConfig : ILCToolsConfig
    {
        public int SiteId { get; set; }
        public IShopsConfig Shops { get; set; } = new ShopsConfig();
        public ISiteConfig Site { get; set; } = new SiteConfig();
    }
}

ShopsConfig.cs

namespace LC.Assets.Core.Utility.Config
{
    public interface IShopsConfig
    {
        int Id { get; set; }
    }

    public class ShopsConfig : IShopsConfig
    {
        public int Id { get; set; }
    }
}

SiteConfig.cs

namespace LC.Assets.Core.Utility.Config
{
    public interface ISiteConfig
    {
        int Id { get; set; }
    }

    public class SiteConfig : ISiteConfig
    {
        public int Id { get; set; }
    }
}

配置代码

services.AddSingleton<Configuration>();
services.AddOptions();

Configuration c = services.BuildServiceProvider().GetRequiredService<Configuration>();

services.Configure<LCToolsConfig>(c.GetSection("LCTools"));

2 个答案:

答案 0 :(得分:1)

解决方案

最后,我将该节绑定到对象,然后将对象注册为单例。

代码,配置

IConfiguration c = provider.GetRequiredService<IConfiguration>();
var cnf = new LCToolsConfig();
c.Bind("LCTools", cnf);

services.AddOptions();
services.AddSingleton(cnf);

代码,注入

public StoreController(LCToolsConfig config) { }

谢谢!

答案 1 :(得分:-1)

只需将services.Configure<LCToolsConfig>(c.GetSection("LCTools"));更改为services.Configure<LCToolsConfig>(() => c.GetSection("LCTools"));

services.Configure<T>()正在寻找一个System.Action作为参数,并且您将c.GetSection()而不是{{1 }}。