手把手教你写ORM(三)
之前说了,今天主要将实现Yourname.Config这个项目,这个项目用来管理所有的配置文件,把所有的配置文件Cache到内存,并且需要在配置文件更新的时候刷新内存中的配置数据。
这里如何在内存存储这些配置文件是小问题,用HashTable就能解决了,Key用文件的Path,Value就是文件的内容了。
这里我们建立一个Resource类,用来处理这些配置资源
2{
3 private static HashTable _configfile=new HashTable();
4 public HashTable Configs
5 {
6 get{return _configfile;}
7 }
8 public Resource(string Path)
9 {
10 StreamReader readfile=new StreamReader(Path);
11 using(readfile)
12 {
13 _configfile.Add(Path,readfile.ReadToEnd());
14 readfile.Close();
15 }
16 }
17
18}
这里的代码已经具备了基本功能了,不过最好在Add前先检测以下项是否存在最好。
这样子,当我们去new Resource的时候一个配置文件就加载到了HashTable里面了。
这个时候我们不用每一次需要配置的时候都去读取文件,不过占用了内存,典型的空间换时间的方法。
不过现在还有一个问题,就是如果在运行的时候,如果,我们修改了配置文件的话,由于加载到了内存,我们的修改不会马上体现到程序里,必须重新启动程序才行,对于Web来说,重新启动IIS站点是没有用的,必须重起服务。
这是一个问题
怎么获取一个文件是否修改了呢?我们可以通过比对文件的最后修改时间的属性来解决。
在这里,我们在第一次加载一个配置文件的时候记录其最后修改时间,然后在以后每一次new的时候都去检查一次文件的最后修改时间和记录的是否相等,如果不相等,就说明文件被修改过了,于是就重新加载文件,这样子就能够实现即时刷新配置了
这里我们为了记录文件的最后修改时间,再添加一个HashTable,还是用Path作Key,Value就是文件的最后修改时间了
具体代码:
2{
3 private static HashTable _configfile=new HashTable();
4 private static HashTable _configtime=new HashTable();
5 public HashTable Configs
6 {
7 get{return _configfile;}
8 }
9 public Resource(string Path)
10 {
11 if(!File(Path).GetLastEditTime().Equles((DateTime)_configtime[Path]))
12 {
13 StreamReader readfile=new StreamReader(Path);
14 using(readfile)
15 {
16 _configfile.Add(Path,readfile.ReadToEnd());
17 readfile.Close();
18 _configtime.Add(Path,File(Path).GetLastEditTime());
19 }
20 }
21 }
22
23}
这里很多的判断阿容错阿这些我都没做,也没有用现成项目的现成源代码,都是些此文时现用记事本手写的,如果有错请见谅阿。
这里我们就可以通过 Resource rc=new Resource("xxx.xml"); rc.Configs["xx.xml"];来获取XML的配置内容了,但是这样子还不是最终的版本,我们需要通过类名就能获取他的配置,还有就是光有配置的XML还不行,我们还需要从XML里面分析出配置的内容才行,这些都是下一步我们来实现的东西
to be continue......
手把手教你写ORM(三)相关推荐
- Android 开发之手把手教你写 ButterKnife 框架(三)
系列文章目录导读: Android开发之手把手教你写ButterKnife框架(一) Android开发之手把手教你写ButterKnife框架(二) Android开发之手把手教你写ButterKn ...
- 手把手教你写电商爬虫-第二课 实战尚妆网分页商品采集爬虫
系列教程 手把手教你写电商爬虫-第一课 找个软柿子捏捏 如果没有看过第一课的朋友,请先移步第一课,第一课讲了一些基础性的东西,通过软柿子"切糕王子"这个电商网站好好的练了一次手,相 ...
- 手把手教你写一个生成对抗网络
成对抗网络代码全解析, 详细代码解析(TensorFlow, numpy, matplotlib, scipy) 那么,什么是 GANs? 用 Ian Goodfellow 自己的话来说: " ...
- php注册程序,[PHP初级]手把手教你写注册程序 1
[PHP初级]手把手教你写注册程序 1 实例内容 在此教程,我们将通过写一个用户注册程序,学习以下内容: 数据的传输与获取 信息的验证 pdo方式操作数据库 事务处理 前台显示文件:index.php ...
- 手把手教你写Linux I2C设备驱动
手把手教你写Linux I2C设备驱动 标签:Linux 设备 驱动 详解 i2c 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http:/ ...
- 手把手教你写DI_3_小白徒手支持 Singleton 和 Scoped 生命周期
在上一节:手把手教你写DI_2_小白徒手撸构造函数注入 浑身绷带的小白同学:我们继续开展我们的工作,大家都知道 Singleton是什么,就是全局只有一个呗,我们就先从它开始,这个多简单,我们找个字典 ...
- 手把手教你写一个spring IOC容器
本文分享自华为云社区<手把手教你写一个spring IOC容器>,原文作者:技术火炬手. spring框架的基础核心和起点毫无疑问就是IOC,IOC作为spring容器提供的核心技术,成功 ...
- 手把手教你写网站:Python WEB开发技术实战
摘要:本文详细介绍了Python WEB开发的基础入门.以一个博客站点的开发为例讲解了基于Django框架开发WEB站点的全过程.通过本文的学习可以快速掌握基于Django的Python WEB的开发 ...
- 手把手教你写专利申请书/如何申请专利
摘要 小前言 (一)申请前的准备工作 1.申请前查询 2.其他方面的考虑 3.申请文件准备 (二)填写专利申请系列文档 1.实际操作步骤 2.具体操作 ...
最新文章
- centos 创建 logrotate 进行日志分割
- HTML5 input元素新的特性
- EF Core For MySql查询中使用DateTime.Now作为查询条件的一个小问题
- python 复制文件_10 行 Python 代码写 1 个 USB 病毒
- mysql中select语句子句,了解mysql中select语句操作实例
- java soap协议头_自己调用webservice方法总结(带请求头SoapHeader)
- 尼古拉斯 android_圣尼古拉斯和Alexa的访问
- php网站分区,PHP - Manual: 分区和分片 (官方文档)
- 零基础学python看什么书好?
- visual studio 2008 intellisense does not work
- 数据接口请求异常:error_springboot2.2.X手册:构建多元化的API接口,我们这样子设计
- 大数据平台应用开发的痛点有哪些
- Oracle 11g安装步骤(超详细)
- 科技爱好者周刊:第 98 期
- 数据外推算法 c语言,[原创]如何进行内插法和外推法的计算
- 设计模式 -- Facade
- echarts 文本标签配置、label文字样式
- iOS 中input隐藏输入光标
- 仿今日头条小程序搭建
- ERROR: Pool overlaps with other one on this address space