在 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> (本文很长) 摘要:本文主要介绍了使用外部登陆提供程序登陆的 ...
随机推荐
- 强化学习(十三) 策略梯度(Policy Gradient)
在前面讲到的DQN系列强化学习算法中,我们主要对价值函数进行了近似表示,基于价值来学习.这种Value Based强化学习方法在很多领域都得到比较好的应用,但是Value Based强化学习方法也有很 ...
- 看看redis中那些好玩的module (sql on redis, bf/cf on redis)
自从redis加入了module功能之后,redis的生态就很有意思了,每个领域的大佬都会以插件的形式给redis扩展一些新的功能,比如本篇说到的rediSQL,rebloom. 一:rediSQL ...
- Java线程状态间的互相转换
ava中线程的状态分为6种. 1. 初始(NEW):新创建了一个线程对象,但还没有调用start()方法. 2. 运行(RUNNABLE):Java线程中将就绪(ready)和运行中(running) ...
- 浅谈java线程池实现
再进入主题之前,我们先了解几个概念,对读源码有所帮助,对于线程池的运行状态,有4个级别,分别是RUNNING,SHUTING,STOP,TIDING,TERMINATED 解释如下: The runS ...
- 如何使用 Enterprise Architect 画 UML
本文同时发布于http://fantasylion.github.io/tools/How-to-use-EA 重识 EA (Enterprise Architect) 公司使用的 OMS 是从外面买 ...
- Git 学习总结
概况 CVS 及 SVN 都是集中式的版本控制系统,而 Git 是分布式版本控制系统. 集中式版本控制系统最大的毛病就是必须联网才能工作: 分布式版本控制系统根本没有“中央服务器”,每个人的电脑上都是 ...
- ORM(三)QuerySet查询字段操作
这里的环境还是用上次的环境: Django项目:orm_practice app/models.py中有如下几个类: models.py publishing表内容如下: pid name 1 机械工 ...
- 多功能设备mfd驱动
一.概述 mfd是Multifunction device的简称,即多功能设备,是许多有共性的设备的集合,mfd由核心层(core)以及其下的"子设备"组成.从下文将会看到,mfd ...
- How to resolve CSRF protection error while adding service through Ambari api
Short Description: This article will describe on how to disable CSRF protection in Ambari. Article A ...
- ASP.NET开发中修改代码而不重启网站
我们在做网站开发的时候,通常是写好了一个功能就要进行测试,Visual Studio上点“Start Debugging”(快捷键是F5),这是调试模式,也有直接运行模式,“Start Without ...