|
<p >应用程序在运行时需要读取配置信息。在.NET环境下这种需求同样必不可少。.NET提供一种基于XML的统一配置文件。就ASP.NET而言,此文件名为web.config。应用程序在运行时能够读取该文件的具体内容。.NET同时还提供了一系列的调用,这些调用可使读取配置文件信息的过程变得相当简单,不过要实现这一点,还需要编写一些C#代码。本文中,我将要提出的解决方案可以进一步简化此过程,同时还提供了一种分层的提取机制,此方案在很大程度上与文件的XML格式无关。 <p >此外,编程人员不必知道很多有关XML 类以及其他一些XML细节的信息。"配置服务"就是灵活体系结构的入门。如果能够正确利用配置服务,我们就可以此为基础逐步实现下列服务:<p >·统一的工厂服务 <p >·相关的数据访问服务 <p >·声明的基于信息集的分层数据集服务 <p >·声明的组件服务 <p >如果本文中解释配置服务时提到这些服务,指的是上述这些服务的组合。<p >下面就让我们开始吧,首先来看一个简单的web.config 文件,该文件中具有一些配置实体。<p ><ccid_nobr><table width="550" border="1" cellspacing="0" cellpadding="2" bordercolorlight = "black" bordercolordark = "#FFFFFF" align="center"><tr><td bgcolor="e6e6e6" class="code"><pre><ccid_code><?xml version="1.0" encoding="utf-8" ?><configuration> <configSections> <section name="SimpleConfiguration" type="MySectionHandler,MyAssembly"> </section> </configSections><SimpleConfiguration> <Module1> <section1> <key1>value1</key1> <key2>value2</key2> </section1> </Module1> <Module2> <section1> <key1>value1</key1> <key2>value2</key2> <section1> </Module2></SimpleConfiguration></ccid_code></pre></td></tr></table></ccid_nobr><p ><center><font color="#000099"><strong>.NET 应该如何处理此文件</strong></font></center><p >如果建立了上述配置文件,您的目的就是要读取该文件中SimpleConfiguration部分的实体信息。要想实现这一点,就应该在.NET中添加以下代码: <p ><ccid_nobr><table width="550" border="1" cellspacing="0" cellpadding="2" bordercolorlight = "black" bordercolordark = "#FFFFFF" align="center"><tr><td bgcolor="e6e6e6" class="code"><pre><ccid_code>ArrayList modules =(ArrayList)System.Configuration.ConfigurationSettings. GetConfig("SimpleConfiguration");</ccid_code></pre></td></tr></table></ccid_nobr><p >此行代码可以引发一系列操作。进行上述调用时,.NET 将调用名为SimpleConfiguration的类(在文件中的 configSections部分)并且通过将一个XML结点传递给那个创建方法来调用熟知的Create方法。不论此Create方法返回何种类型的对象,该对象都将会传递给GetConfig(...)的调用者。为了给出一个更加完整的示例,下面就介绍一个此类型处理器的示例代码: <p ><ccid_nobr><table width="550" border="1" cellspacing="0" cellpadding="2" bordercolorlight = "black" bordercolordark = "#FFFFFF" align="center"><tr><td bgcolor="e6e6e6" class="code"><pre><ccid_code>public class MySectionHandler : IConfigurationSectionHandler{ public object Create(object parent, object configContext, XmlNode section) { ... Read your xmlnode section ... return an ArrayList } // end of method} // end of class</ccid_code></pre></td></tr></table></ccid_nobr><p >客户端与处理同种对象的section 处理器之间必须达成一致。在这种情况下,该对象就是指ArrayList。 <p ><center><font color="#000099"><strong>如何简化这种方法</strong></font></center><p >上述方法有不少优点。调用者可获得一个C# 对象,此对象与每一个XML section相对应。您可以拥有数目不限的XML section。另一方面,为了简便起见,您需要做到: <p >1.为每一个 section 编写一个类。 <p >2.解析 XML section 以便将其转变成相应的对象。<p >客户端常常希望拥有一个更简单的配置接口。下面就是这样一个简单的示例: <p ><ccid_nobr><table width="550" border="1" cellspacing="0" cellpadding="2" bordercolorlight = "black" bordercolordark = "#FFFFFF" align="center"><tr><td bgcolor="e6e6e6" class="code"><pre><ccid_code>string value = AppServices.getValue("/SimpleConfiguration/Module1/section1/key1");</ccid_code></pre></td></tr></table></ccid_nobr><p align="center"><font color="FF0000" >1</font>23<span class="content01">下一页>></span></p></p> |
|