我有一些配置界面
public interface IAppConfig
{
IFeatureConfiguration FeatureConfiguration { get; set; }
IOtherConfiguration OtherConfiguration { get; set; }
}
public interface IFeatureConfiguration
{
string SettingFoo { get; set; }
}
public interface IOtherConfiguration
{
string SettingBar { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
和课程
public class AppConfig : IAppConfig
{
public IFeatureConfiguration FeatureConfiguration { get; set; }
public IOtherConfiguration OtherConfiguration { get; set; }
}
public class FeatureConfiguration : IFeatureConfiguration
{
public string SettingFoo { get; set; }
}
public class OtherConfiguration : IOtherConfiguration
{
public string SettingBar { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我想Startup.cs
使用代码将 appsetting.json 绑定到类:
var appConfiguration = Configuration.GetSection("Configuration").Get<AppConfig>();
Run Code Online (Sandbox Code Playgroud)
我有一个例外:
"Cannot create instance of type '[...].IFeatureConfiguration' because it is either abstract or an interface."
我知道我可以摆脱接口并仅使用类,但我真的想要它们......任何帮助将不胜感激
我有同样的场景,我是这样做的:
例如appsettings.json
如下所示:
{
"Configuration": {
"FeatureConfiguration ": {
"SettingFoo": "Test setting foo"
},
"OtherConfiguration": {
"SettingBar": "Test setting bar"
}
}
}
Run Code Online (Sandbox Code Playgroud)
你有一些如下所示的界面:
public interface IAppConfig
{
IFeatureConfiguration FeatureConfiguration { get; set; }
IOtherConfiguration OtherConfiguration { get; set; }
}
public interface IFeatureConfiguration
{
string SettingFoo { get; set; }
}
public interface IOtherConfiguration
{
string SettingBar { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
您实现了这些接口,如下所示:
public class AppConfig : IAppConfig
{
public IFeatureConfiguration FeatureConfiguration { get; set; }
public IOtherConfiguration OtherConfiguration { get; set; }
}
public class FeatureConfiguration : IFeatureConfiguration
{
public string SettingFoo { get; set; }
}
public class OtherConfiguration : IOtherConfiguration
{
public string SettingBar { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
首先,您必须使用具体的类对象初始化 appConfiguration
IAppConfig appConfiguration = new AppConfig {
FeatureConfiguration = new FeatureConfiguration(),
OtherConfiguration = new OtherConfiguration()
}
Run Code Online (Sandbox Code Playgroud)
您可以将嵌套配置绑定到该对象。您可以使用Bind
如下方法来实现此目的:
Configuration.GetSection("Configuration").Bind(appConfiguration);
Run Code Online (Sandbox Code Playgroud)
总之appsettings.json
绑定到appConfiguration
对象。
您还可以看到这个答案:https ://stackoverflow.com/a/63170497/8810311