17,740
社区成员
发帖
与我相关
我的任务
分享
String val = configuration.GetValue<string>("key","defaultValue")
当然前提是你已经通过注入获取到configuration ,如果不在注入的情况下使用,可以参见这里,其实就是把开源的部分代码截取出来用而已
https://www.lebang2020.cn/details/20101932pcdy00.html
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Specialized;
using System.IO;
using System.Text;
namespace Common.Configuration
{
public class ConfigurationManager
{
private static NameValueCollection _configurationCollection;
private static DateTime _lastWriteTime;
public static bool _configFileExist;
public static string _defaultPath = "/appsettings.json";
static ConfigurationManager()
{
_lastWriteTime = DateTime.MinValue;
_configurationCollection = new NameValueCollection();
}
private static void ReadJosnConfig(string filePath = null)
{
if (string.IsNullOrEmpty(filePath)) filePath = Directory.GetCurrentDirectory() + _defaultPath;
FileInfo config = new FileInfo(filePath);
if (!(_configFileExist = config.Exists)) return;
//if (_lastWriteTime == config.LastWriteTime) return;
_configurationCollection.Clear();
StreamReader sr = new StreamReader(filePath, Encoding.Default);
JObject config_object = JObject.Parse(sr.ReadToEnd());
sr.Close();
if (config_object == null || !(config_object is JObject)) return;
if (config_object["appSettings.Url"] != null && !string.IsNullOrEmpty(config_object["appSettings.Url"].ToString()))
{
ReadJosnConfig(config_object["appSettings.Url"].ToString());
}
else
{
foreach (JProperty prop in config_object["AppSettings"])
{
_configurationCollection[prop.Name] = prop.Value.ToString();
}
}
}
public static bool ConfigFileExist { get { return _configFileExist; } }
public static NameValueCollection AppSettings
{
get
{
ReadJosnConfig();
return _configFileExist ? _configurationCollection : new NameValueCollection();
}
}
}
}
其中有一行我给注释掉了(应该是挺明显的)。
本意是每次获取配置文件的修改时间,比对与现在的是否一致,不一致则从新读取。
但是加了外部配置文件(appSettings.Url)以后,在以时间作为一个基准就不太合适了。会被原始文件给卡住。所以暂时注掉了。后来发现这么做也不太合适。在并发的时候估计会出现读取锁的问题。
不过测试了一下效率还可以,再改改