Net Core全局配置读取管理方法全局配置读取管理方法ConfigurationManager
主要为大家详细介绍了Net Core全局配置读取管理方法ConfigurationManager的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一
下
最近在学习.Net Core的过程中,发现.Net Framework中常用的ConfigurationManager在Core中竟然被干掉了。
也能理解。Core中使用的配置文件全是Json,不像Framework使用的XML,暂时不支持也是能理解的,但是毕竟全局配置文件这种东西还挺重要的,阅读了一些
文章后目前有3个解决方案。
一、引入扩展一、引入扩展System.Configuration.ConfigurationManager
这个扩展库可以直接在Nuget中获取。
使用方法和说明见.NET Core 2.0迁移技巧之web.config配置文件
读取的文件类型和方法都跟.Net Framework中一致,而且仅需引入包就可以,瞬间很兴奋有木有!
但是!在使用过过程中发现这个扩展有问题。项目运行过程中需修改我的app.config文件,对我项目中输出的内容没有丝毫影响,Debug发现获取到的值的确没有
变化。重启项目都没有用。只有把项目重新编译才好使。
不知道是不是因为我的打开方式不对,但是最终放弃这个方法。
二、引入扩展二、引入扩展Microsoft.Extensions.Options.ConfigurationExtensions
这个扩展库也可以直接在Nuget中获取。
使用方法和说明见 ASP.NET Core实现类库项目读取配置文件
这个可以读取application.json中的配置参数,不再使用XML可以说很好的贴近Core的设计理念。
可惜,这个也有点美中不足的地方。首先跟上面的那个一样,运行时修改json文件读取到的内容不会改变,但是至少重启项目可以修改,这个让我欣慰很多。
另外就是,这个方法采用的是反序列化的原理,也就是必须有一个跟配置文件对应的实体类才可以,这个感觉比较鸡肋,放弃。
三、自定义扩展方法三、自定义扩展方法
这个是我这次说的重点,要是前面两个方法能满足读者你的需求,那么就没有必要看下去。
废话少说,先上代码:
public class ConfigurationManager
{
/// <summary>
/// 配置内容
/// </summary>
private static NameValueCollection _configurationCollection = new NameValueCollection();
/// <summary>
/// 配置监听响应链堆栈
/// </summary>
private static Stack<KeyValuePair<string, FileSystemWatcher>> FileListeners = new Stack<KeyValuePair<string, FileSystemWatcher>>();
/// <summary>
/// 默认路径
/// </summary>
private static string _defaultPath = Directory.GetCurrentDirectory() + "\appsettings.json";
/// <summary>
/// 最终配置文件路径
/// </summary>
private static string _configPath = null;
/// <summary>
/// 配置节点关键字
/// </summary>
private static string _configSection = "AppSettings";
/// <summary>
/// 配置外连接的后缀
/// </summary>
private static string _configUrlPostfix = "Url";
/// <summary>
/// 最终修改时间戳
/// </summary>
private static long _timeStamp = 0L;
/// <summary>
/// 配置外链关键词,例如:AppSettings.Url
/// </summary>
private static string _configUrlSection { get { return _configSection + "." + _configUrlPostfix; } }
static ConfigurationManager()
{
ConfigFinder(_defaultPath);
}
/// <summary>
/// 确定配置文件路径
/// </summary>
private static void ConfigFinder(string Path)
{
_configPath = Path;
JObject config_json = new JObject();
while (config_json != null)
{
config_json = null;
评论0
最新资源