YZR.Data webconfig端的配置

这里记录一下,YZR.Data对系统兼容数据库在webconfig的配置处理.

<?xml version="1.0" encoding="utf-8"?>

<!--
  有关如何配置 ASP.NET 应用程序的详细信息,请访问
  http://go.microsoft.com/fwlink/?LinkId=169433
  -->

<configuration>
  <configSections>
    <section name="YZRSetting" type="YZR.Config.YZRSetting, YZR.Config" />
  </configSections>

  <connectionStrings>
    <add name="connString" connectionString="Data Source=127.0.0.1/orcl;Persist Security Info=True;User ID=YZR;Password=677714" providerName="YZROracle"/>
  </connectionStrings>
  <system.web>
    <compilation debug="true" targetFramework="4.5" />
    <httpRuntime targetFramework="4.5" />
  </system.web>
  <YZRSetting>
    <base title="巴夫&amp;巴夫" subTitle="YZR的博客" url="http://www.cnblogs.com/Francis_YZR"></base>
    <strConn>
      <!--<file name="headPhoto" path="upload/image/headPhoto" size="200"></file>
      <file name="album" path="upload/image/album" size="1024"></file>-->
      <conn Rname="Oracle" Rvalue="YZROracle"></conn>
      <conn Rname="Sqlserver" Rvalue="YZRSqlserver"></conn>
    </strConn>
  </YZRSetting>
</configuration>

一开始的时候,我的做法是在appStart.cs中通过配置"RAtion"或者"RMtion"来决定采用Oracle,还是Sqlserver,但这样并不明智,因为需要改动项目代码,所以,我就想把决定数据库驱动的时机转移webconfig.通过providerName来指定数据库驱动.

如下:

<connectionStrings>
    <add name="connString"          connectionString="Data Source=127.0.0.1/orcl;Persist Security Info=True;User ID=YZR;Password=677714"          providerName="YZROracle"/>
  </connectionStrings>

然后,providerName提供出来之后,并未知道其有多少选择值,而且我希望也把它也配置起来,可以实现手动配置和任意添加删除,所以,我在wenconfig文件中加了自定义节点.

如下:

<YZRSetting>
    <base title="巴夫&amp;巴夫" subTitle="YZR的博客" url="http://www.cnblogs.com/Francis_YZR"></base>
    <strConn>
      <!--<file name="headPhoto" path="upload/image/headPhoto" size="200"></file>
      <file name="album" path="upload/image/album" size="1024"></file>-->
      <conn Rname="Oracle" Rvalue="YZROracle"></conn>
      <conn Rname="Sqlserver" Rvalue="YZRSqlserver"></conn>
    </strConn>
  </YZRSetting>

这样的目的很明确,就是providerName的值是通过Rvalue决定的.

下面贴上YZRSetting.cs

namespace YZR.Config  //好好研究一下ConfigurationSection
{
    using System.Configuration;
    public class YZRSetting : ConfigurationSection
    {
        //base节点
        [ConfigurationProperty("base")]
        public baseSection BaseSetting { get { return (baseSection)base["base"]; } }

        //fileUpload节点
        [ConfigurationProperty("strConn")]
        public strConnSection StrConnSetting { get { return (strConnSection)base["strConn"]; } }
    }

    public class baseSection : ConfigurationElement
    {
        //title属性
        [ConfigurationProperty("title", IsKey = true, IsRequired = true)]
        public string title { get { return (string)base["title"]; } set { title = value; } }
        //subTitle属性
        [ConfigurationProperty("subTitle", IsRequired = false, DefaultValue = "")]
        public string subTitle { get { return (string)base["subTitle"]; } set { subTitle = value; } }
        //url属性
        [ConfigurationProperty("url", IsRequired = true)]
        public string url { get { return (string)base["url"]; } set { url = value; } }
    }

    [ConfigurationCollection(typeof(connSection), AddItemName = "conn")]//子元素的声明conn
    public class strConnSection : ConfigurationElementCollection
    {
        protected override ConfigurationElement CreateNewElement()
        {
            return new connSection();
        }

        protected override object GetElementKey(ConfigurationElement element)
        {
            return ((connSection)element).Rname;
        }

        public connSection this[int index]
        {
            get { return (connSection)base.BaseGet(index); }
        }

        new public connSection this[string name]
        {
            get { return (connSection)base.BaseGet(name); }
        }
    }

    public class connSection : ConfigurationElement
    {
        //name属性
        [ConfigurationProperty("Rname", IsKey = true, IsRequired = true)]
        public string Rname { get { return (string)this["Rname"]; } set { Rname = value; } }
        //value属性
        [ConfigurationProperty("Rvalue", IsRequired = true)]
        public string Rvalue { get { return (string)this["Rvalue"]; } set { Rvalue = value; } }
        ////path属性
        //[ConfigurationProperty("path", IsRequired = true)]
        //public string path { get { return (string)this["path"]; } set { path = value; } }
        ////size属性
        //[ConfigurationProperty("size", IsRequired = true, DefaultValue = 1024)]
        //public int size { get { return (int)this["size"]; } set { size = value; } }
    }

    public class WebSettingManager
    {
        public static YZRSetting WebSetting = (YZRSetting)System.Configuration.ConfigurationManager.GetSection("YZRSetting");
    }
    /*
     *
     *      WebSettingManager.WebSetting.BaseSetting.title + " - " + WebSettingManager.WebSetting.BaseSetting.subTitle;
            WebSettingManager.WebSetting.BaseSetting.title;
            WebSettingManager.WebSetting.BaseSetting.subTitle;
            WebSettingManager.WebSetting.BaseSetting.url;

            WebSettingManager.WebSetting.strConnSetting;//数组的形式
     */
}

在appStart.cs的处理如下:

            string Title = WebSettingManager.WebSetting.BaseSetting.title + " - " + WebSettingManager.WebSetting.BaseSetting.subTitle;
            int count = WebSettingManager.WebSetting.StrConnSetting.Count;
            List<string> list = new List<string>();
            for (int i = 0; i < count; i++)
            {
                connSection section=WebSettingManager.WebSetting.StrConnSetting[i];
                list.Add(section.Rvalue);
            }
            //string strConn = System.Web.Configuration.WebConfigurationManager.ConnectionStrings["default"].ConnectionString;
            //string connString = System.Configuration.ConfigurationManager.ConnectionStrings["connString"].ToString();
            string ProviderName = System.Configuration.ConfigurationManager.ConnectionStrings["connString"].ProviderName;
            string path = AppDomain.CurrentDomain.BaseDirectory;
            Assembly ass = Assembly.LoadFrom(path + "bin\\YZR.Data.dll");
            //Assembly ass = Assembly.Load("YZR.Entity");
            //TODO:Oracle数据库使用RAtion,Sqlserver使用RMotion
            Type type = null;
            for (int i = 0; i < list.Count; i++)
            {
                if (list[i].Equals(ProviderName, StringComparison.OrdinalIgnoreCase))
                {
                    type = ass.GetType("YZR.Data." + "RAction");
                    break;
                }
                if (list[i].Equals(ProviderName, StringComparison.OrdinalIgnoreCase))
                {
                    type = ass.GetType("YZR.Data." + "RMotion");
                    break;
                }
                else
                    throw new Exception("配置节点出错");
            }

END!

时间: 2024-10-10 18:05:31

YZR.Data webconfig端的配置的相关文章

【DATAGUARD】物理dg配置客户端无缝切换 (八.1)--Data Guard Broker 的配置

[DATAGUARD]物理dg配置客户端无缝切换 (八.1)--Data Guard Broker 的配置 一.1  BLOG文档结构图       一.2  前言部分   一.2.1  导读 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识,~O(∩_∩)O~: ① Data Guard Broker 的配置 ② Fast-Start Failover 的配置 ③ Oracle DataGuard 之客户端TAF 配置 ④ 使用DGMGRL 来管理数据库 ⑤

【DATAGUARD】物理dg配置客户端无缝切换--Data Guard Broker 的配置(1)

[DATAGUARD]物理dg配置客户端无缝切换 (八.1)--Data Guard Broker 的配置 一.2.2  实验环境介绍 项目 主库 dg库 db 类型 单实例 单实例 db version 11.2.0.3 11.2.0.3 db 存储 FS type FS type ORACLE_SID oradg11g oradgphy db_name oradg11g oradg11g 主机IP地址: 192.168.59.130 192.168.59.130 OS版本及kernel版本

Unity3d Web Player 的server端联网配置

http://blog.csdn.net/dyllove98/article/details/9501695 新游戏出了第一个能跑完流程的版本,不得不佩服Unity3D强大的功力,PC.MAC OS.Linux.IOS.Android.web player,前天刚发布的unity3d 4.2版本还支持WINDOWS PHONE.Black Barry这些平台统统一键打包,so easy!不过在打包部署Web Player时,在联网方面出现了一点麻烦,算是顺风顺水过程当中的一个小插曲吧!所以又可以

RTX手机服务端的配置

对于一般的公司来说,几乎所使用的软件都是免费的,RTX这个更不用说了,原因大致为以下2点,(1)公司规模不够大,没必要,能实现常用功能就好了(2)能省则省,要不花钱请来的工程师干嘛用.我主要说以下三点服务器的安装.升级和RTX手机端的配置. 1.RTX服务器的安装: 这个去RTX官网下载,解压后下一步下一步傻瓜式的安装. 第一次登陆RTX以后默认管理员,密码为空,进去自己设置. 完了申请license文件,将文件导入即可. 2.服务的升级: 表面说叫升级,其实挺扯的,进入 RTX服务管理器-用户

JMeter学习-010-JMeter 配置元件实例之 - CSV Data Set Config 参数化配置

众所周知,在进行接口测试的过程中,需要创建不同的场景(不同条件的输入,来验证不同的入参的返回结果).因而,在日常的自动化接口监控或商品监控等线上监控过程中,需要配置大量的入参来监控接口的返回是否正确. 日常常见的线上监控几个简单的监控示例场景如下: 监控电商网站某个类目下的商品数量.若类目中商品的数量小于一定的数量,则认为需要认为查看商品池的商品是否正确: 监控商品的价格.当商品价格出现超出限定的波动幅度时,通知相应的商品负责人,对其进行确认,从而保证商品价格的正确无误. 监控商品在某一地域是否

Teamcenter9 ITK服务端开发配置

说明:由于Tc9创造性的出现了64bit的版本,还有个更创造性的要求,就是64位的只能在VS2008sp1中编译,故以VS2008重新写了开发配置 首选项名称 TC_customization_libraries 环境 首先,来个环境的截图,E盘下目录. 创建项目 Eg:libMax_register_callbacks.c #include <tc.h> #include <user_server_exits.h> #include <user_exits/user_exi

JMeter学习-010-JMeter 配置文件实例之 - CSV Data Set Config 参数化配置

众所周知,在进行接口测试的过程中,需要创建不同的场景(不同条件的输入,来验证不同的入参的返回结果).因而,在日常的自动化接口监控或商品监控等线上监控过程中,需要配置大量的入参来监控接口的返回是否正确. 日常常见的线上监控几个简单的监控示例场景如下: 监控电商网站某个类目下的商品数量.若类目中商品的数量小于一定的数量,则认为需要认为查看商品池的商品是否正确: 监控商品的价格.当商品价格出现超出限定的波动幅度时,通知相应的商品负责人,对其进行确认,从而保证商品价格的正确无误. 监控商品在某一地域是否

System Center 2012 R2 POC部署之Data Protection Manager备份配置

System Center 2012 R2 POC部署之Data Protection Manager备份配置 1. 添加磁盘 DPM服务器中用来给DPM备份使用的磁盘,只需要初始化并联机即可,无需划分分区 打开DPM控制台----管理----磁盘 点击添加, 选择磁盘,点击添加 点击确定 点击是,然后点击确定就添加完成好了. 2. 安装代理 打开DPM控制台---管理---带来---安装 选择"安装代理",点击下一步 选择要点击代理的计算机,然后点击添加 点击下一步 输入用于安装代理

java自动化测试成长日记-之CVS客户端和服务端安装和部署1:CVS服务端的配置和基本使用

CVS服务端的配置和基本使用 在做java自动化测试集成环境搭建的时候,无论怎样,你都会选择一个源代码管理工具,如:SVN,CVS,VSS等:但如果你使用Eclipse工具,建议你使用CVS源代码管理工具,因为它本身就自带了CVS客户端插件,可以直接使用(具体使用情况,可参考:java自动化测试成长日记-之CVS客户端和服务端安装和部署2:CVS客户端的配置和基本使用章节): 首先,你需要下载:cvsnt-2.5.03.2151安装包.msi,服务端安装软件(可在百度里面搜索找到,相应的资源).