在 asp.net core 中使用类似 Application 的服务
在 asp.net core 中使用类似 Application 的服务
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);
}
基于一个字典对象的简单实现:
ApplicationSettingInMemoryService
public class ApplicationSettingInMemoryService : IApplicationSettingService
{
private readonly ConcurrentDictionary<string, string> _settingDictionary = new ConcurrentDictionary<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
在 asp.net core 中使用类似 Application 的服务的更多相关文章
- 在ASP.NET Core中使用Apworks开发数据服务:对HAL的支持
HAL,全称为Hypertext Application Language,它是一种简单的数据格式,它能以一种简单.统一的形式,在API中引入超链接特性,使得API的可发现性(discoverable ...
- 【半译】在ASP.NET Core中创建内部使用作用域服务的Quartz.NET宿主服务
在我的上一篇文章中,我展示了如何使用ASP.NET Core创建Quartz.NET托管服务并使用它来按计划运行后台任务.不幸的是,由于Quartz.NET API的工作方式,在Quartz作业中使用 ...
- 如何在 ASP.NET Core 中构建轻量级服务
在 ASP.NET Core 中处理 Web 应用程序时,我们可能经常希望构建轻量级服务,也就是没有模板或控制器类的服务. 轻量级服务可以降低资源消耗,而且能够提高性能.我们可以在 Startup 或 ...
- ASP.NET Core 中文文档 第三章 原理(6)全球化与本地化
原文:Globalization and localization 作者:Rick Anderson.Damien Bowden.Bart Calixto.Nadeem Afana 翻译:谢炀(Kil ...
- ASP.NET Core 中文文档 第三章 原理(13)管理应用程序状态
原文:Managing Application State 作者:Steve Smith 翻译:姚阿勇(Dr.Yao) 校对:高嵩 在 ASP.NET Core 中,有多种途径可以对应用程序的状态进行 ...
- [译]在Asp.Net Core 中使用外部登陆(google、微博...)
原文出自Rui Figueiredo的博文<External Login Providers in ASP.NET Core> 摘要:本文主要介绍了使用外部登陆提供程序登陆的流程,以及身份 ...
- 在Asp.Net Core中集成Kafka
在我们的业务中,我们通常需要在自己的业务子系统之间相互发送消息,一端去发送消息另一端去消费当前消息,这就涉及到使用消息队列MQ的一些内容,消息队列成熟的框架有多种,这里你可以读这篇文章来了解这些MQ的 ...
- ASP.NET Core中如何针对一个使用HttpClient对象的类编写单元测试
原文地址: How to unit test a class that consumes an HttpClient with IHttpClientFactory in ASP.NET Core? ...
- 【译】在Asp.Net Core 中使用外部登陆(google、微博...)
原文出自Rui Figueiredo的博文<External Login Providers in ASP.NET Core> (本文很长) 摘要:本文主要介绍了使用外部登陆提供程序登陆的 ...
随机推荐
- [译]PEP 342--增强型生成器:协程
PEP原文 : https://www.python.org/dev/peps/pep-0342/ PEP标题: Coroutines via Enhanced Generators PEP作者: G ...
- Socket深度探索 4 PHP(转)
[连载] Socket 深度探索 4 PHP (一) [连载] Socket 深度探究 4 PHP (二) [连载] Socket 深度探究 4 PHP (三)
- 一键解决更改计算机名后无法启动MSSQLSERVER服务问题
问题版本:SQL Server 2012. 解决办法:打开服务,Win + R运行services.msc,找到 SQL SERVER(MSSQLSERVER)服务右键->属性,切换至登录选项卡 ...
- 探究 CSS 混合模式\滤镜导致 CSS 3D 失效问题
今天在写一个小的 CSS Demo,一个关于 3d 球的旋转动画,关于 CSS 3D,少不了会使用下面这几个属性: { transform-style: preserve-3d; perspectiv ...
- 微服务与RPC
1.微服务架构 1.1 特征 自动化部署,端点智能化,语言和数据的去中心化控制. 1.2架构 一种将一个单一应用程序开发为一组小型服务的方法,每个服务运行在自己的进程中,服务间通信采用轻量级通信机制( ...
- 不带parent指针的successor求解
问题: 请设计一个算法,寻找二叉树中指定结点的下一个结点(即中序遍历的后继).给定树的根结点指针TreeNode* root和结点的值int p,请返回值为p的结点的后继结点的值.保证结点的值大于等于 ...
- Python开发:Python2和Python3的共存和切换使用
从python2到python3,这两个版本可以说是从语法.编码等多个方面上都有很大的差别.为了不带入过多的累赘,Python 3.0在设计的时候没有考虑向下相容,也就是说许多针对早期Python2版 ...
- 和逛微博、刷朋友圈一样玩转 GitHub
自打毕业之后,可以说每天打开 Github 或Email 看有没有 watch 项目的消息或者自己项目的 issue,然后在Explore 看看社区内项目的走势,紧接着开始写代码搬砖的工作,偶尔也会关 ...
- 从壹开始前后端分离 [ Vue2.0+.NET Core2.1] 十七 ║Vue基础:使用Vue.js 来画博客首页+指令(一)
缘起 书说前两篇文章<十五 ║ Vue前篇:JS对象&字面量&this>和 <十六 ║ Vue前篇:ES6初体验 & 模块化编程>,已经通过对js面向对 ...
- Prometheus安装和配置node_exporter监控主机
Node_exporter是可以在* Nix和Linux系统上运行的计算机度量标准的导出器. Node_exporter 主要用于暴露 metrics 给 Prometheus,其中 metrics ...