五一献礼(一)实战分析web.confing中灵活的类配置
首先兄弟们要明白这段代码只是掩饰功能真正项目中会见便些
MM:你要做什么
?
猪:
~~我都交代了吧~~,其实就是利用大家都比较收悉的System.Configuration.Provider.ProviderBase,作一个演示
具体的作用就是,利用ProviderBase在web.confing中配置,得以在程序中灵活应用。
MM:ProviderBase不就是那个什么提供程序的基类么,
你还没有说具体的作用
猪:
我说说~~,利用Enum,选择在web.confing的配置的基类得以获得样式表的多种状态
MM:
我喜欢Style我看你那又不少.cs,先介绍下不许说谎否则
修理你~~。

关系图
猪:
,~~ConfingPage由于他继承了ConfigurationSection,使得他可以设置web.confing中可以配置的节点类,
StyleNames-是节点的属性
StyleClass-则是节点的内部节点
如果~~大姐你不明白~~请看下边
<?xml version="1.0"?>

<configuration>
<configSections>
<section name="StyleEnum" type="SeemPigAlikeVolitation.ConfingPage, __code" requirePermission="false"/>
</configSections>

<!--StyleNames配置可以使用的样式-->
<StyleEnum StyleNames="Read,StyleT">
<StyleClass>
<add name="Read" type="SeemPigAlikeVolitation.StyleRead" />
<add name="StyleT" type="SeemPigAlikeVolitation.StyleT" />
</StyleClass>

</StyleEnum>
MM :
....~~阿不好意思~~刚才睡着了~~ ,你这个好像在那见过,对了叫什么配置节点~~老师讲过的,有点记不起来了 <configSections>是什么~~里面的又是什么咚咚
猪:
(我讲的很无聊么~~),指定配置节和命名空间声明(MSDN),变相来说就是首先里面不是有section节点么
第一个属性就是name你看他不是等于StyleEnum,你在看下面不是有个节点也叫StyleEnum,对吧这个name就是设置节点的名称,type=就是设置这个节点的类,至于__code(我还不太清楚,如果您知道请您给我留言不胜感激)不过我猜测是说得这个类放在App_Code中,RequirePermission =false是只得这个节点不受web的信任级别的影响
MM:
哦是这样啊 ,那下面的节点StyleEnum里面是什么,麻烦你快一点
猫和老鼠药开始了~~
猪:
好好~~,StyleNames是属性-他的作用是确定有多少个StyleClass属性可以使用,而<StyleClass>是内迁节点作用是可以包含一组类型,里面的没个add都代表一个类型(口渴)
MM:我去看猫和老鼠了~~你给我录音把
猪:(心:你你~~去死吧),- -你去吧~~别忘了约会~~,
以下是猪的录音部分:
//--这个是ConfingPage类的代码
StyleNames-返回一个字符串代表可用的配置节点的集合
[ConfigurationProperty("StyleNames", IsRequired=true)]是属性在xml中显示的样式,后面那个是必须
请注意-这里有点要注意咯get,set和这个属性的名称最好一样这样可以避免产生两个错误:
1.避免产生堆栈溢出
2.避免数据错误的调用
StyleClass-返回的是继承System.Configuration.Provider.ProviderBase的类
[ConfigurationValidatorAttribute(typeof(ProviderSettingsValidation))]-是用来严正这个节点的正确性
这个属性比较特别他只有get因为它会读取配置节点中add的部分的type~~欧
MM
ConfigurationValidatorBase他就是用来验证节点类型
//-----得到对象集合的属性
public override bool CanValidate(Type type)
{
return type == typeof(ProviderSettingsCollection);
}
public override void Validate(object value)
//--反射的时候自动调用(估计调用方法也是反射)
漂亮的as ~~不会产生异常
ProviderSettingsCollection providerCollection = value as ProviderSettingsCollection;
//--分析每一个add
foreach (ProviderSettings _provider in providerCollection)
{
//---如果是字符串返回true
String.IsNullOrEmpty(_provider.Type)
//---验证类型是否存在,这里可以改成验证类型是否存在并且是否是指定的类型
Type dataAccessType = Type.GetType(_provider.Type);
if (dataAccessType == null)
~~晕录音机没电了~~艾偶得约会阿~~算了-- 第一篇就到这里了~~欢迎常沟通,技术交流,本人是猪宝贝拜拜
这个给家娱乐下-您猜猜我在干什么~~
MM:你要做什么
猪:
具体的作用就是,利用ProviderBase在web.confing中配置,得以在程序中灵活应用。
MM:ProviderBase不就是那个什么提供程序的基类么,
猪:
MM:

关系图
猪:
StyleNames-是节点的属性
StyleClass-则是节点的内部节点
如果~~大姐你不明白~~请看下边
<?xml version="1.0"?>
<configuration>
<configSections>
<section name="StyleEnum" type="SeemPigAlikeVolitation.ConfingPage, __code" requirePermission="false"/>
</configSections>
<!--StyleNames配置可以使用的样式-->
<StyleEnum StyleNames="Read,StyleT">
<StyleClass>
<add name="Read" type="SeemPigAlikeVolitation.StyleRead" />
<add name="StyleT" type="SeemPigAlikeVolitation.StyleT" />
</StyleClass>
</StyleEnum>猪:
第一个属性就是name你看他不是等于StyleEnum,你在看下面不是有个节点也叫StyleEnum,对吧这个name就是设置节点的名称,type=就是设置这个节点的类,至于__code(我还不太清楚,如果您知道请您给我留言不胜感激)不过我猜测是说得这个类放在App_Code中,RequirePermission =false是只得这个节点不受web的信任级别的影响
MM:
猪:
MM:我去看猫和老鼠了~~你给我录音把
猪:(心:你你~~去死吧),- -你去吧~~别忘了约会~~,
以下是猪的录音部分:
//--这个是ConfingPage类的代码
[ConfigurationProperty("StyleNames", IsRequired=true)]是属性在xml中显示的样式,后面那个是必须
请注意-这里有点要注意咯get,set和这个属性的名称最好一样这样可以避免产生两个错误:
1.避免产生堆栈溢出
2.避免数据错误的调用
StyleClass-返回的是继承System.Configuration.Provider.ProviderBase的类
[ConfigurationValidatorAttribute(typeof(ProviderSettingsValidation))]-是用来严正这个节点的正确性
这个属性比较特别他只有get因为它会读取配置节点中add的部分的type~~欧
ConfigurationValidatorBase他就是用来验证节点类型
//-----得到对象集合的属性
public override bool CanValidate(Type type)
{
return type == typeof(ProviderSettingsCollection);
}
public override void Validate(object value)
//--反射的时候自动调用(估计调用方法也是反射)
漂亮的as ~~不会产生异常
ProviderSettingsCollection providerCollection = value as ProviderSettingsCollection;
//--分析每一个add
foreach (ProviderSettings _provider in providerCollection)
{
//---如果是字符串返回true
String.IsNullOrEmpty(_provider.Type)
//---验证类型是否存在,这里可以改成验证类型是否存在并且是否是指定的类型
Type dataAccessType = Type.GetType(_provider.Type);
if (dataAccessType == null)
~~晕录音机没电了~~艾偶得约会阿~~算了-- 第一篇就到这里了~~欢迎常沟通,技术交流,本人是猪宝贝拜拜
这个给家娱乐下-您猜猜我在干什么~~
如果您猜到这个是做什么的~~在最后的catch中虽然捕获的是System.Exception,但是还是有一种错误找捕获不了
,~您不妨找找看~~当然(错误可以在web.confing中配,由于代码的需求有错误没有可能使用代码处理呢 ?我也在找答案)- -当然这只是推理游戏别当真



}
}
浙公网安备 33010602011771号