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));
}
}
}
抽象配置父类...
还有些东西没有摆出来...例如单个的配置啦..还是就是怎么样去使用它呀.....呵呵..有点懒...迟点记得再搞....
查看全文
相关阅读:
java学习笔记(day21)
linux软件管理之rpm管理rpm包
linux软件管理之yum管理rpm包
linux软件管理之概述
linux存储管理之磁盘配额
linux存储管理之文件系统
linux存储管理之mount挂载
linux存储管理之磁盘阵列
linux文件管理之链接文件
linux存储管理之自动挂在
原文地址:https://www.cnblogs.com/yans/p/1225130.html
最新文章
CentOS安装MySQL的完整步骤
gorilla/mux类库解析
Redis高可用集群方案
redis主从配置 从而实现数据备份和读写分离
redis mysql 连接池 之 golang 实现
python爬虫实战
网络爬虫入门:你的第一个爬虫项目(requests库)
requests库核心API源码分析
1、web爬虫,requests请求
Scrapy 框架 (学习笔记-1)
热门文章
使用 Flask 和 Vue.js 来构建全栈单页应用
教程 Redis+ flask+vue 在线聊天
等待唤醒机制(2)
等待唤醒机制
线程同步机制
多线程(1)
异常
java学习笔记(day24)
java学习笔记(day23)
java学习笔记(day22)
Copyright © 2011-2022 走看看