zoukankan
html css js c++ java
抽象配置工厂
秉承一天写一篇的精神...今天的我又来了.....什么??前面有一天两天漏了?? 哦..那天水浸啦...
写的虽然不是很多旷世巨作,不也相信也不是什么很垃圾的东西..比较都是些程序的积累...经验吧...
今天要现的是
抽象配置工厂
的实现
配置的实现:
public
class
ProvidersHanders : IConfigurationSectionHandler
{
IConfigurationSectionHandler 成员
#region
IConfigurationSectionHandler 成员
public
object
Create(
object
parent,
object
configContext, System.Xml.XmlNode section)
{
XmlSerializer ser
=
new
XmlSerializer(
typeof
(ProvidersConfiguration));
return
ser.Deserialize(
new
XmlNodeReader(section));
}
#endregion
}
实现configurationsectionhandler接口
[Serializable()]
[XmlRoot(
"
ProvidersConfig
"
)]
public
class
ProvidersConfiguration
{
private
ProvidersCollection providers;
private
static
yansCache cache
=
yansCache.Instance;
public
ProvidersCollection Providers
{
get
{
return
providers; }
set
{ providers
=
value; }
}
public
static
ProvidersConfiguration GetConfig
{
get
{
if
(
null
==
cache[
"
ProvidersConfig
"
])
{
cache.Max(
"
ProvidersConfig
"
, ConfigurationManager.GetSection(
"
ProvidersConfig
"
));
}
return
(ProvidersConfiguration)cache[
"
ProvidersConfig
"
];
}
}
public
static
Type GetTypeByProviderName(
string
ProviderName)
{
foreach
(SingleProvider sp
in
GetConfig.Providers)
{
if
(sp.ProviderName
==
ProviderName)
{
return
Type.GetType(sp.Type);
}
}
throw
new
ArgumentNullException(
"
找不到类型:
"
+
ProviderName);
return
null
;
}
}
配置读取
[Serializable()]
public
class
ProvidersCollection : CollectionBase
{
public
virtual
void
Add(SingleProvider p)
{
InnerList.Add(p);
}
public
SingleProvider
this
[
int
index]
{
get
{
return
(SingleProvider)InnerList[index]; }
set
{ InnerList[index]
=
value; }
}
}
配置集合
[Serializable()]
public
class
SingleProvider
{
private
string
type;
public
string
Type
{
get
{
return
type; }
set
{ type
=
value; }
}
private
string
providerName;
public
string
ProviderName
{
get
{
return
providerName; }
set
{ providerName
=
value; }
}
}
单条配置
<
configSections
>
<
section
name
="ProvidersConfig"
type
="yansComponents.Handlers.ProvidersHanders, yansComponents"
/>
</
configSections
>
配置文件配置信息
/**/
///
<summary>
///
Providers模式父类
///
</summary>
///
<typeparam name="T"></typeparam>
public
class
BaseAbstract
<
T
>
{
根据类型获取实例
#region
根据类型获取实例
class
Ret
{
static
Ret()
{ }
//
internal static Hashtable instance = new Hashtable();
private
static
T instance;
public
static
T CreateInstance(Type type)
{
//
if (!instance.Contains(type.FullName))
//
{
//
instance.Add(type.FullName, (T)Activator.CreateInstance(type));
//
}
if
(
null
==
instance)
{
instance
=
(T)Activator.CreateInstance(type);
}
//
return (T)instance[type.FullName];
return
instance;
}
}
/**/
///
<summary>
///
根据类型返回一个实例
///
</summary>
///
<param name="type">
类型
</param>
///
<returns></returns>
public
static
T getInstance(Type type)
{
return
CreateInstance(type);
}
/**/
///
<summary>
///
创建实例
///
</summary>
///
<param name="type"></param>
///
<returns></returns>
protected
static
T CreateInstance(Type type)
{
if
(
null
==
type)
{
ThrowExceptionWhileTypeIsNull(type,
"
提交的类型不存在或为空,创建实例失败。
"
);
return
default
(T);
}
return
Ret.CreateInstance(type);
}
/**/
///
<summary>
///
提交的类型不存在或为空
///
</summary>
///
<param name="type"></param>
protected
static
void
ThrowExceptionWhileTypeIsNull(Type type,
string
ErrMessage)
{
throw
new
ArgumentNullException(ErrMessage);
}
#endregion
/**/
///
<summary>
///
获得实例
///
</summary>
public
static
T Instance
{
get
{
return
getInstance(ProvidersConfiguration.GetTypeByProviderName(
typeof
(T).Name));
}
}
}
抽象配置父类...
还有些东西没有摆出来...例如单个的配置啦..还是就是怎么样去使用它呀.....呵呵..有点懒...迟点记得再搞....
查看全文
相关阅读:
微软算法100题25 查找连续最长的数字串
微软算法100题24 就地逆序单链表
微软算法100题21 数列中所有和为特定值的组合
微软算法100题20 字符串转整数 atoi
约瑟夫环
微软算法100题17 字符串中找到第一个只出现一次的字符
微软算法100题16 按层遍历二叉树
微软算法100题15 求二元查找树的镜像
微软算法100题14 在排序数组中找到和为指定数的任意两个元素
NLP(十) 主题识别
原文地址:https://www.cnblogs.com/yans/p/1225130.html
最新文章
ireport5.6+jasperreport6.3开发(二)--web开发的配置
ireport5.6+jasperreport6.3开发(一)--中文环境配置在
gdb 常用内容
css学习记录
DOM元素querySelectorAll可能让你意外的特性表现
JavaScript prototype 使用介绍
js 添加事件 attachEvent 和 addEventListener 的用法
js中var self=this的解释
如何在HTML中加载Flash(2种实现方法)_HTML/Xhtml_网页制作
javascript中的innerHTML是什么意思,怎么个用法?
热门文章
JavaScript的作用域和块级作用域概念理解
JavaScript ES6 的 let 和 var 的比较
HTML DOM appendChild() 方法
原生的强大DOM选择器querySelector
常见的SQL语句
FullPage(插件)
烟花效果(Canvas和Proton)
html5中的Canvas对图片的一些修改
前端开发表单信息基本信息获取
微软算法100题26 左旋转字符串
Copyright © 2011-2022 走看看