我正在将一个Asp.Net MVC应用程序迁移到.Net5。我有一个静态类,用作web.NET中设置的外观。我的Setting类公开了静态属性,每个类都表示设置组,例如:
public static class MySettings
{
public static class MainDB
{
public static string ConnectionString
{
get
{
// Code to retrieve the actual values
return "";
}
}
}
public static class ExternalApi
{
public static string Uri
{
get
{ // Code to retrieve the actual values
return "";
}
}
}
public static class OtherSettings
{
// ...
}
}
字符串
在.Net Core 5中(实际上,从.Net Core 2开始),我们使用POCO的tyo read设置,如https://learn.microsoft.com/en-us/aspnet/core/fundamentals/configuration/options?view=aspnetcore-5.0中所示
有没有办法将我的所有设置Map到一个对象,例如,对于appsettings.json:
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*",
"Settings": {
"MainDB": {
"ConnectionString": "whatever needed to access the db"
},
"ExtrenaAPI" {
"Uri": "https://whatever.api.com",
"Key": "mysupersecretkey",
"Secret": "mysupersecret-uh-secret"
}
}
}
型
职业:
public class MainDB
{
public string ConnectionString { get; set; }
}
public class ExternalApi
{
public string Uri { get; set; }
public string Key { get; set; }
public string Secret { get; set; }
}
public class Settings
{
public MainDB MainDB { get; set; }
`public ExternalApi ExternalApi { get; set; }
}
型
配置(在Startup.cs中):
services.Configure<Settings>(Configuration.GetSection("Settings"));
型
(Yes,我知道我可以做services.Configure<MainDB>(Configuration.GetSection("Settings:MainDB"));
和services.Configure<ExternalApi>(Configuration.GetSection("Settings:ExternalApi"));
,但我想在一个单一的对象,如果可能的所有设置。
有什么建议吗?
2条答案
按热度按时间u0njafvf1#
我假设你在这里谈论的是绑定(应用程序设置文件到一个单一的对象?)如果你对一些额外的代码没有意见,那么这可以为你想要实现的目标工作。
字符串
如果您只想设置单个节点/节的层次结构,您可以简单地执行
((IConfiguration)config.GetSection("SectionName")).Bind(myObject)
无论哪种方式,
config.Bind(object)
都是这里的神奇位。7kqas0il2#
IConfiguration Configuration
* 是你对appsettings
的外观(实际上,是对所有设置的外观,无论它们是来自应用程序设置、用户机密还是其他地方)。字符串
然后可能将其作为
MySettings
类中的私有静态变量-但这似乎是多余的。