现在的位置: 首页 > 综合 > 正文

五一献礼(一)实战分析web.confing中灵活的类配置

2012年10月01日 ⁄ 综合 ⁄ 共 6310字 ⁄ 字号 评论关闭
首先兄弟们要明白这段代码只是掩饰功能真正项目中会见便些

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) 

~~晕录音机没电了~~艾偶得约会阿~~算了-- 第一篇就到这里了~~欢迎常沟通,技术交流,本人是猪宝贝拜拜

这个给家娱乐下-您猜猜我在干什么~~

如果您猜到这个是做什么的~~在最后的catch中虽然捕获的是System.Exception,但是还是有一种错误找捕获不了
,~您不妨找找看~~当然(错误可以在web.confing中配,由于代码的需求有错误没有可能使用代码处理呢 ?我也在找答案)- -当然这只是推理游戏别当真

抱歉!评论已关闭.