在asp.net core中使用類似Application的服務(wù)的實現(xiàn)
Intro#
在 asp.net 中,我們可以借助 Application 來保存一些服務(wù)器端全局變量,比如說服務(wù)器端同時在線的人數(shù)計數(shù),比如一些網(wǎng)站的配置信息。
在 ASP.NET 應(yīng)用中,之前開發(fā)的活動室預(yù)約系統(tǒng)把網(wǎng)站的 keyword 以及 Title 等信息,在網(wǎng)站啟動的時候會從數(shù)據(jù)庫加載配置并保存到 Application 中,在需要的地方直接使用 Application 來獲取,后臺更新配置之后,更新 Application 變量,這樣就不需要重啟網(wǎng)站就可以更新網(wǎng)站配置信息了,在 Razor 頁面上使用示例:
<title>@ViewBag.Title - @HttpContext.Current.Application["SystemTitle"]</title> <meta name="keywords" content="@HttpContext.Current.Application["SystemKeywords"]" />
遷移到 asp.net core 后,就不能直接這樣用了,于是自己實現(xiàn)了一個服務(wù),去加載網(wǎng)站配置信息,比較簡單簡陋,權(quán)當是拋磚引玉,不喜勿噴
自定義 Application 服務(wù) IApplicationSettingService#
服務(wù)接口定義:
public interface IApplicationSettingService
{
string GetSettingValue(string settingKey);
string SetSettingValue(string settingKey, string settingValue);
int AddSettings(Dictionary<string, string> dictionary);
}
基于一個字典對象的簡單實現(xiàn):
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;
}
}
也可以根據(jù)自己的需要寫不同的實現(xiàn),比如放在配置中或者自己的緩存中,這里應(yīng)用暫時是單體應(yīng)用,所以只是放在了內(nèi)存對象中。
使用#
1.在 Startup 中注冊服務(wù):
services.TryAddSingleton<IApplicationSettingService, ApplicationSettingInMemoryService>();
2.從數(shù)據(jù)庫中讀取配置信息,初始化配置數(shù)據(jù)
3.在 Razor 頁面上使用,示例
@using ActivityReservation.Services
@inject IApplicationSettingService applicationSettings
/* 此處省略 N 行代碼 ... */
<title>@($"{ViewBag.Title} -- {applicationSettings.GetSettingValue("SystemTitle")}") </title>
<meta name="keywords" content="@(applicationSettings.GetSettingValue("SystemKeywords"))" />
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
- 理解ASP.NET Core 依賴注入(Dependency Injection)
- asp.net core3.1cookie和jwt混合認證授權(quán)實現(xiàn)多種身份驗證方案
- 理解ASP.NET Core 啟動類(Startup)
- 理解ASP.NET Core 中間件(Middleware)
- ASP.NET Core文件壓縮常見使用誤區(qū)(最佳實踐)
- asp.net core MVC之實現(xiàn)基于token的認證
- ASP.NET Core 集成 React SPA應(yīng)用的步驟
- ASP.NET Core快速入門之實戰(zhàn)篇
- ASP.NET Core如何注入多個服務(wù)實現(xiàn)類
相關(guān)文章
ASP.NET GridView中加入RadioButton不能單選的解決方案
這篇文章主要介紹了ASP.NET GridView中加入RadioButton不能單選的解決方案,希望大家閱讀完本文有所收獲。2015-09-09
ASP.NET Core文件壓縮常見使用誤區(qū)(最佳實踐)
本文給大家分享ASP.NET Core文件壓縮常見的三種誤區(qū),就每種誤區(qū)給大家講解的非常詳細,是項目實踐的最佳紀錄,對ASP.NET Core文件壓縮相關(guān)知識感興趣的朋友一起看看吧2021-05-05
獲取客戶端IP地址c#/vb.net各自實現(xiàn)代碼
項目要求獲取客戶端的IP地址,分析并且用c#與vb各自實現(xiàn)了此要求,有需要的朋友可以了解下啊,希望本文對你們有所幫助2013-01-01
ASP.NET?MVC增加一條記錄同時添加N條集合屬性所對應(yīng)的個體
這篇文章介紹了ASP.NET?MVC增加一條記錄同時添加N條集合屬性所對應(yīng)個體的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-08-08
silverlight2.0Beta版TextBox輸入中文解決方法
silverlight Beta 2.0 中TetBox輸入漢字,除MS自己的輸入法,其它所有輸入法都會出現(xiàn)輸入的東西會在TextBox中重復(fù)一次的現(xiàn)像,google ,Baidu了一下,大家說好像是silverlight自己的一個BUG,可能會在Repleass的時候修改。2008-10-10
ASP.NET泛型三之使用協(xié)變和逆變實現(xiàn)類型轉(zhuǎn)換
這篇文章介紹了ASP.NET使用協(xié)變和逆變實現(xiàn)泛型類型轉(zhuǎn)換的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-08-08
解決iis7.5服務(wù)器上.net 獲取不到https頁面的信息
讓我糾結(jié)了一天多的問題,給大家看下,有相同情況的可以不用浪費時間了,本人當時找了好半天都沒找到什么有用的信息,項目在本地沒有問題,但部署在服務(wù)器后,獲取不到https頁面的信息,加入下面的代碼就可以了,因為iis7.5的安全協(xié)議比較高的原因。2014-06-06
asp.net 動態(tài)創(chuàng)建TextBox控件及狀態(tài)數(shù)據(jù)如何加載
接著上文Asp.net TextBox的TextChanged事件你真的清楚嗎?這里我們來說說狀態(tài)數(shù)據(jù)時如何加載的,需要的朋友可以參考下2012-12-12

