c# - 在 .net core 2.2 中初始化设置的正确方法?
问题描述
我创建了一个 REST api 应用程序,它有许多设置并存储在数据库中。这些设置在过滤和向表中插入数据时使用。
因为我每次需要插入数据时都需要访问设置。我没有从数据库访问设置,而是创建了一个全局设置类,并将每个设置都放在该类中。
public static class GlobalSettings
{
public static string Setting_1;
public static string Setting_2;
public static string Setting_3;
public static string Setting_4;
public static void Initialize(ISettingsRepo repo)
{
try
{
var settings = new GSettings(repo);
Setting_1 = settings.SetSetting_1();
Setting_2 = settings.SetSetting_2();
Setting_3 = settings.SetSetting_3();
Setting_4 = settings.SetSetting_4();
}
catch (Exception ex)
{
throw new Exception("Error when loading settings.\r\n" + ex.Message);
}
}
}
这ISettingsRepo
是将从数据库加载设置的范围服务。这些函数将初始化属性的设置。
现在初始化GlobalSettings
我在启动类中使用了配置方法,就像这样。
using (var scope = app.ApplicationServices.CreateScope())
{
Settings.GlobalSettings.Initialize(scope.ServiceProvider
.GetRequiredService<Data_Repo.Settings.ISettingsRepo>());
}
现在我可以在控制器或我的 api 中的任何地方使用它,并在不访问数据库的情况下获取设置。GlobalSettings
如果设置更新,我也可以随时重新加载。但是这种方法是否正确或有内存泄漏问题?
有没有更好的方法来做到这一点。?
解决方案
例子
我的 appsetting.json 有这样的结构。
"EmailSettings": {
"MailServer": "",
"MailPort": ,
"Email": "",
"Password": "",
"SenderName": "",
"Sender": "",
"SysAdminEmail": ""
},
我会这样定义我的班级
public class EmailSettings
{
public string MailServer { get; set; }
public int MailPort { get; set; }
public string SenderName { get; set; }
public string Sender { get; set; }
public string Email { get; set; }
public string Password { get; set; }
public string SysAdminEmail { get; set; }
}
所以我们有了配置结构。我们需要的最后一件事是在 Startup.cs 中注册
services.Configure<EmailSettings>(configuration.GetSection("EmailSettings"));
在服务类中使用它
private readonly IOptions<EmailSettings> _emailSetting;
public EmailSender(IOptions<EmailSettings> emailSetting)
{
_emailSetting = emailSetting;
}
email.From.Add(new MailboxAddress(_emailSetting.Value.SenderName, _emailSetting.Value.Sender));
推荐阅读
- php - 切换到 https 搞砸了我的 ajax 调用
- android - GoogleSignIn 统一包依赖冲突 Google Play 服务
- java - 导入 Java BigInteger
- r - 使用长数据格式更改 ggplot2 图中的一种线型
- css - 仅发布压缩 (.min.css) 文件的 Visual Studio 设置
- php - 如何在具有相同键的 1 个数组上使用 array_merge_recursive
- javascript - arr.splice() 方法删除反应原生项目中的错误项目
- hyperlink - 将动态链接添加到自定义字段
- python - 如何将 google colab 中的集群文件保存到 Google Drive
- reactjs - chartjs:条形小于实际列,工具提示不显示