了解或者认识KT:
在项目中如何使用KT?
KT是一个库,所以将KT的dll文件引用到您的项目上即可使用KT里的函数功能。
本节将介绍大家认识KT库里的缓存与配置。它们都存放在“KT.Core“下,当你已在你的项目里引用了KT库后,则写下以下代码就可以使用到KT里的缓存与配置对象了。
using KT.Core;
缓存
KT的缓存只是简单的对.NET的缓存Cache进行了一个简单的包装,以便更方便的使用。
1、增加一个缓存项:
//增加一个长时效的缓存项Cache.Add("key1", DateTime.Now);//增加一个具有绝对过滤时间的缓存项Cache.Add("key2", DateTime.Now, DateTime.Today.AddDays(1));//增加一个与文件关联的缓存项,如果文件有更改则缓存失效Cache.Add("key3", DateTime.Now, "c:\cache.txt");
2、删除缓存项
//删除对应键值的缓存项Cache.Remove("key1");//清空所有缓存Cache.Clear();
3、获取某个缓存项
//获取对应键值的缓存项object value = Cache.Get("key1");//获取对应键值的缓存项,如果缓存没有数据,则调用委托获取数据并存入缓存后返回DateTime time = Cache.GetOrAdd("key2", () =>{ return DateTime.Now;});
配置
平时在项目开发中,参数配置都习惯在项目配置文件(app.config或web.config)的AppSettings节点中配置,比如以下示例:
程序代码里要使用参数时,直接调用即可,如下代码:
string api_key = ConfigurationManager.AppSettings["api_key"];string api_secret = ConfigurationManager.AppSettings["api_secret"];
如果我们的参数非常的多,这将会导致我们的项目配置文件非常的大。并且如果在web项目中,我们的配置参数在运行过程中需要更改,则将会导致我们的web站点应用程序的重启!对于正常运行的项目来说,程序的重启是希望不要发生的,因为这将会导致session的丢失等相关问题。虽然我们可以在appSettings节点里使用file属性采用外部文件来配置避免这问题,但在某些场合下,file属性却是无能为力了。比如需要分多个配置文件存储不同的数据,file属性是无法做到的。
KT的配置
1、KT的配置文件
KT的配置文件,默认存储于程序根目录下的config目录,当然,你也可以自定义配置的存储路径,比如在app.config或web.config里的AppSettings节点里配置以下设置。
如果未设置则默认是程序的根目录(Web应用程序则是站点根目录;Windows应用程序则是可执行文件所在的目录)下的config目录
KT的配置文件采用的是标准xml文件,如下示例:
2 aliey 20
上面配置中,共定义了4个参数。其中k1参数的定义同.net里的appSettings一样,通过<add>节点元素定义;其它的参数都是采用节点形式定义。
KT的配置文件有两个特殊的节点<add>与<include>节点。
1、<add>节点:如果定义此节点,并且带有“key”属性,则表示增加一个参数,参数值由“value”属性定义。如果定义此节点,但不带有任何属性,则看作普通的参数"add”对待。如下面示例:
action/add
共定义了“k1”与“add”两个参数。
2、<include>节点:如果定义此节点,并且带有“file”属性,则表示是引用相关的配置文件。否则如果不带有任何属性,则看作普通的参数“include”对待。如下面示例:
action/add action/include
共导入了“mysettings.xml”与“c:\config\mysettings2.xml”两个配置文件里的配置参数,并且还定义了一个“include”参数,其中file属性的值可以是相对路径或绝对路径,如果是相对路径则是“相对于当前配置文件所在的路径”。
所有参数的节点都可以重复定义,但参数最终的值将由最后一个定义节点决定(注:“<include file=””>”节点是例外),即最后定义的将覆盖先前定义的值。如下示例:
2
最终,“k1"的值是“2”。
2、配置参数的获取
参数的获取是通过KT.Core.Settings实例类获取,此类共有几个静态方法和属性。
A、BasePath : 返回存储配置文件所在的基路径。此值可以通过上面所说的方法,在appSettings里修改。默认是程序根目录下的config目录.
B、Default : 返回默认存储配置文件的所有配置参数值。此默认配置参数存储于基路径下的"settings.config"文件。
C、From : 从配置文件获取配置参数。配置文件可以是相对路径或绝对路径,如果是相对路径则相对于BasePath。
D、Get<T>: 从配置文件获取配置参数并映射为某个实体类。配置文件可以是相对路径或绝对路径,如果是相对路径则相对于BasePath。
假如以下配置存储在基路径下的settings.config文件
2 aliey 20
那我们可以这样获取参数“k1”、“k2”、“k.name”的值
Console.WriteLine(Settings.Default["k1"]);Console.WriteLine(Settings.Default["k2"]);Console.WriteLine(Settings.Default["k.name"]);Console.WriteLine(Settings.Default["k.age"]);
如果我们配置文件不是默认的“settings.config”文件,那我们可以这样获取配置
var setttings = Settings.From("mysettings.xml");Console.WriteLine(setttings["k1"]);Console.WriteLine(setttings["k2"]);Console.WriteLine(setttings["k.name"]);Console.WriteLine(setttings["k.age"]);
如果我们的配置文件结构可以映射为某个类,比如上面的配置文件可以映射为以下类结构
public class KItem{ public string Name { get; set; } public int Age { get; set; }}public class AppSettings{ public int K1 { get; set; } public int K2 { get; set; } public KItem K { get; set; } }
那我们还可以直接通过Get<T>方法直接获取配置实体类,如下面的示例:
var app = Settings.Get("mysettings.xml"); Console.WriteLine("K1={0}", app.K1); Console.WriteLine("K2={0}", app.K2); Console.WriteLine("K.Name={0}", app.K.Name); Console.WriteLine("K.Age={0}", app.K.Age);
由于AppSettings里的属性“K”是一个“KItem”类型,所以KT将会自动将“<k.name>”和“<k.age>”这两个节点映射为“KItem”类型的值.
注:KT的配置都已启用缓存功能,所以不需要担心它的效率问题。
我们可以用KT的配置做什么?
A、各应用程序之间的配置可以互相独立存放。 比如在WEB环境下,同一个站点下有多个不同的WEB应用程序,如论坛、博客、接口服务等等,那我们可以将它们的配置分别以不同的文件名存放于“基路径”下,如“forum.config”, “blog.config”,"service.config“,再调用From或Get<T>方法读取不同的文件名即可。
B、各应用程序之间的配置可以共享使用。比如上面例子所说的,如果“论坛”程序要调用“博客”里的参数,则我们可以在论坛的配置参数里加入“<include file=“blog.config”>”节点引入“博客”的配置参数。
C、各应用程序的配置可以统一存放。比如在WEB环境下,我们有A、B、C三个站点,这三个站点都需要用到同一个数据库,于是我们分别在这三个站点下写了一个同样用户名与密码的“ConnectionString“配置参数,当某一天,我们修改了数据库的用户密码,那我们就要分别打开这三个站点的目录去修改“ConnectionString”配置参数。而如果我们将A、B、C三个站点的KT配置的基路径设置为同一个目录,那我们就只要打开一个目录就可以修改到三个站点的参数了。