Intro
在 ASP.NET 中, 我们可以借助 Application 来保存一些服务器端全局变量, 比如说服务器端同时在线的人数计数, 比如一些网站的配置信息.
在 ASP.NET 应用中, 之前开发的活动室预约系统把网站的 keyword 以及 Title 等信息, 在网站启动的时候会从数据库加载配置并保存到 Application 中, 在需要的地方直接使用 Application 来获取, 后台更新配置之后, 更新 Application 变量, 这样就不需要重启网站就可以更新网站配置信息了, 在 Razor 页面上使用示例:
- <title>
- @ViewBag.Title - @HttpContext.Current.Application["SystemTitle"]
- </title>
- <meta name="keywords" content="@HttpContext.Current.Application[" SystemKeywords
- "]" />
迁移到 ASP.NET core 后, 就不能直接这样用了, 于是自己实现了一个服务, 去加载网站配置信息, 比较简单简陋, 权当是抛砖引玉, 不喜勿喷
自定义 Application 服务
IApplicationSettingService
服务接口定义:
- public interface IApplicationSettingService
- {
- string GetSettingValue(string settingKey);
- string SetSettingValue(string settingKey, string settingValue);
- int AddSettings(Dictionary<string, string> dictionary);
- }
基于一个字典对象的简单实现:
- public class ApplicationSettingInMemoryService : IApplicationSettingService
- {
- private readonly Dictionary<string, string> _settingDictionary = new Dictionary<string, string>();
- public int AddSettings(Dictionary<string, string> dictionary)
- {
- if (dictionary != null && dictionary.Count> 0)
- {
- foreach (var item in dictionary)
- {
- _settingDictionary[item.Key] = item.Value;
- }
- }
- return _settingDictionary.Count;
- }
- public string GetSettingValue(string settingKey)
- {
- _settingDictionary.TryGetValue(settingKey, out var val);
- return val;
- }
- public string SetSettingValue(string settingKey, string settingValue)
- {
- _settingDictionary[settingKey] = settingValue;
- return settingValue;
- }
- }
也可以根据自己的需要写不同的实现, 比如放在配置中或者自己的缓存中, 这里应用暂时是单体应用, 所以只是放在了内存对象中.
使用
在 Startup 中注册服务:
services.TryAddSingleton<IApplicationSettingService, ApplicationSettingInMemoryService>();
从数据库中读取配置信息, 初始化配置数据
在 Razor 页面上使用, 示例
- @using ActivityReservation.Services
- @inject IApplicationSettingService applicationSettings
- /* 此处省略 N 行代码 ... */
- <title>@($"{ViewBag.Title} -- {applicationSettings.GetSettingValue("SystemTitle")}") </title>
- <meta name="keywords" content="@(applicationSettings.GetSettingValue("SystemKeywords"))" />
- Reference
活动室预约项目 https://github.com/WeihanLi/ActivityReservation
来源: https://www.cnblogs.com/weihanli/p/10398404.html