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));
}
}
}
抽象配置父类...
还有些东西没有摆出来...例如单个的配置啦..还是就是怎么样去使用它呀.....呵呵..有点懒...迟点记得再搞....
查看全文
相关阅读:
JQ常用代码
websocket练习
动软生成器 model生成模板
动软生成器 Liger model生成模板
SVN各种错误提示产生原因及处理方法大全
winfom实现关闭后一直运行
在yii中使用分页
html文字垂直居中
给浏览器网页标签页添加图标
html 遇到margin居中的问题
原文地址:https://www.cnblogs.com/yans/p/1225130.html
最新文章
LTE的核心网之:MME,SGW,PGW
系统架构设计师
驾车
系统架构设计师
Node.js入门
Java单元测试
Web安全&软件安全
Bootstrap入门
1.1 Angular入门
Spring Boot
热门文章
Angular的依赖包(module)管理
(转)SQL Server 2008无法修改表的解决办法
(转) MVC身份验证及权限管理-2
(转) MVC身份验证及权限管理-1
(转) MVC 中 @help 用法
(转)code first基础
vs2015产品密钥
WebKitBrowser
解决c#distinct不好用的问题
JQ其他
Copyright © 2011-2022 走看看