我正在尝试从 appsettings 文件加载一些设置,但在使用选项模式时加载列表的方式遇到了一个小问题。假设我有以下类(用于加载设置):
public class Application {
public string Name { get; set; } = "";
public IEnumerable<string> Roles { get; set; } = new[] {""};
public Application ToApplicationWithoutPass() =>
new Application {
Name = Name,
Username = Username,
Roles = Roles.ToList()
};
}
public class Applications {
public IEnumerable<Application> AppList { get; set; } = new List<Application>();
}
这是定义的设置应用程序设置文件看起来像:
"Applications": {
"AppList": [
{
"Name": "SraWebuserAdmin",
"Roles": [ "SraEntitiesWriters", "SraEntitiesReaders", "SraEntitiesLoginAccess" ]
},
...
以下是在 DI 设置中完成的条目ConfigureServices
method:
services.Configure<Applications>(options => Configuration.GetSection("Applications").Bind(options));
services.AddScoped<IApplicationAccessVerifier, ApplicationAccessVerifier>();
最后,这是 ApplicationAccessVerifier 类的构造函数:
public ApplicationAccessVerifier(IOptionsSnapshot<Applications> applicationOptions) {
_applicationOptions = applicationOptions;
}
现在的问题是:如果我不初始化AppList
财产,
public class Applications {
public IEnumerable<Application> AppList { get; set; }
}
然后设置就正确加载了。
但是,如果我像我所展示的那样初始化它(确保属性的归档包装器使用空列表初始化),那么设置将不会复制到AppList
.
我觉得这很奇怪,因为简单的属性(例如:Name
on the Application
类)不受同一问题的影响。
谁能告诉我为什么会发生这种情况或向我指出有关它的官方文档?