[英]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.