了解或者认识KT:

http://www.cnblogs.com/kingthy/archive/2011/08/08/2130973.html

 

在项目中如何使用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<DateTime>("key2", () =>
{
    return DateTime.Now;
});

 

 

配置

平时在项目开发中,参数配置都习惯在项目配置文件(app.config或web.config)的AppSettings节点中配置,比如以下示例:

  <appSettings>
    <add key="api_key" value="key-2011" />
    <add key="api_secret" value="iu5r324323423422" />
  </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节点里配置以下设置。

  <appSettings>
    <!--方法1:设置绝对路径-->
    <add key="KT.SETTINGS.BASEPATH" value="c:\data\config\" />
    <!--方法2:设置相对路径-->
    <add key="KT.SETTINGS.BASEPATH" value="~/data/config/" />
  </appSettings>

如果未设置则默认是程序的根目录(Web应用程序则是站点根目录;Windows应用程序则是可执行文件所在的目录)下的config目录

 

KT的配置文件采用的是标准xml文件,如下示例:

<?xml version="1.0" encoding="utf-8" ?>
<settings>
  <add key="k1" value="1" />
<k2>2</k2> <k.name>aliey</k.name> <k.age>20</k.age> </settings>

 

上面配置中,共定义了4个参数。其中k1参数的定义同.net里的appSettings一样,通过<add>节点元素定义;其它的参数都是采用节点形式定义。

KT的配置文件有两个特殊的节点<add><include>节点。

1、<add>节点:如果定义此节点,并且带有“key”属性,则表示增加一个参数,参数值由“value”属性定义。如果定义此节点,但不带有任何属性,则看作普通的参数"add”对待。如下面示例:

<?xml version="1.0" encoding="utf-8" ?>
<settings>
  <add key="k1" value="1" />
  <add>action/add</add>
</settings>

共定义了“k1”与“add”两个参数。

 

2、<include>节点:如果定义此节点,并且带有“file”属性,则表示是引用相关的配置文件。否则如果不带有任何属性,则看作普通的参数“include”对待。如下面示例:

<?xml version="1.0" encoding="utf-8" ?>
<settings>
  <add key="k1" value="1" />
  <add>action/add</add>
  <include file="mysettings.xml" />
  <include file="c:\config\mysettings2.xml" />
  <include>action/include</include>
</settings>

共导入了“mysettings.xml”与“c:\config\mysettings2.xml”两个配置文件里的配置参数,并且还定义了一个“include”参数,其中file属性的值可以是相对路径或绝对路径,如果是相对路径则是“相对于当前配置文件所在的路径”。

 

所有参数的节点都可以重复定义,但参数最终的值将由最后一个定义节点决定(注:“<include file=””>”节点是例外),即最后定义的将覆盖先前定义的值。如下示例:

<?xml version="1.0" encoding="utf-8" ?>
<settings>
  <add key="k1" value="1" />
  <k1>2</k1>
</settings>

最终,“k1"的值是“2”。

 

2、配置参数的获取

参数的获取是通过KT.Core.Settings实例类获取,此类共有几个静态方法和属性。

A、BasePath : 返回存储配置文件所在的基路径。此值可以通过上面所说的方法,在appSettings里修改。默认是程序根目录下的config目录.

B、Default : 返回默认存储配置文件的所有配置参数值。此默认配置参数存储于基路径下的"settings.config"文件。

C、From : 从配置文件获取配置参数。配置文件可以是相对路径或绝对路径,如果是相对路径则相对于BasePath。

D、Get<T>: 从配置文件获取配置参数并映射为某个实体类。配置文件可以是相对路径或绝对路径,如果是相对路径则相对于BasePath。

 

假如以下配置存储在基路径下的settings.config文件

<?xml version="1.0" encoding="utf-8" ?>
<settings>
  <add key="k1" value="1" />
<k2>2</k2> <k.name>aliey</k.name> <k.age>20</k.age> </settings>

那我们可以这样获取参数“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<AppSettings>("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配置的基路径设置为同一个目录,那我们就只要打开一个目录就可以修改到三个站点的参数了。

作者: Kingthy 发表于 2011-08-16 11:37 原文链接

推荐.NET配套的通用数据层ORM框架:CYQ.Data 通用数据层框架
新浪微博粉丝精灵,刷粉丝、刷评论、刷转发、企业商家微博营销必备工具"