我正在尝试注册自定义配置对象,但无法弄清楚如何对其进行配置。我尝试使用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"));
答案 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 }}。