[英]Creating a static settings class in .net core class library
我邀請批評和反饋。 如果願意的話烤。 我在這里所做的事情感覺不對,我想知道為什么。
在.net core中創建靜態設置類,該類可以從appsettings.json文件返回設置。 它確實可以工作,但是它在每次訪問設置時都使用ConfigurationBuilder。
public static class GeneralSettings
{
private static IConfigurationRoot Configuration = StartConfig();
private static IConfigurationRoot StartConfig()
{
var configBuilder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile($"appsettings.{environment}.json", optional: true, reloadOnChange: true)
.AddEnvironmentVariables();
return configBuilder.Build();
}
public static string ContextUserID
{
get
{
string result =
Configuration.GetSection("AppSettings").GetSection("ContextUserID").Value;
return result;
}
}
}
給定以上代碼,您將在每次調用配置時重新構建配置。 您也可以將其設為單例。 而且由於單身人士不好,所以其他事情可能是錯誤的。 您的直覺覺得這是對的!
static
類。 如果不是static
類,而是要利用.NET Core的內置依賴項注入,我們可以輕松地將此抽象化為一些符合SOLID原則的代碼。 當然,這並不能解決您可以在另一個靜態類中使用新的IContextSettings
問題,但是可以使您直接在需要ContextUserID
地方將此接口用作一等公民 ,而您只需在其中使用依賴項注入即可。您的Controller
或PageModel
public interface IContextSettings
{
string ContextUserID { get; }
}
public class ContextSettings : IContextSettings
{
private IConfiguration configuration;
public ContextSettings(IConfiguration configuration)
{
this.configuration = configuration;
}
public string ContextUserID => configuration.GetSection("AppSettings").GetSection("ContextUserID").Value;
}
public class IndexModel : PageModel
{
private readonly IContextSettings settings;
public IndexModel(IContextSettings settings)
{
this.settings = settings;
}
public IActionResult OnGet()
{
var userId = settings.ContextUserID;
return Page();
}
}
感覺對...對嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.