摘要:EnterpriseLibrary Configuration Facility就好像是在容器和数据类之间的桥,让我们可以轻松得去读取和操作配置文件。熟悉Enterprise Library的人都知道,在Enterprise Library中有一个Configuration Application Block,它可以使我们方便的从各种存储中读写配置信息,通过EnterpriseLibrary Configuration Facility我们就可以像使用普通的组件那样去注册一个数据类,它会用configurationkey来映射到Enterprise Library的配置文件中。

 

主要内容:

1.概述

2.使用Facility

3.原理浅析

 

一.概述

EnterpriseLibrary Configuration Facility就好像是在容器和数据类之间的桥,让我们可以轻松得去读取和操作配置文件。熟悉Enterprise Library的人都知道,在Enterprise Library中有一个Configuration Application Block,它可以使我们方便的从各种存储中读写配置信息,通过EnterpriseLibrary Configuration Facility我们就可以像使用普通的组件那样去注册一个数据类,它会用configurationkey来映射到Enterprise Library的配置文件中。先来看一下该Facility的相关信息:

Facility Information

Uses Proxy

No

Requires Configuration

Yes

Uses Attributes

No

Version

Beta 2

二.使用Facility

1.配置文件,这里使用配置文件注册组件的方式,放在应用程序配置文件中,这里唯一需要注意的是configurationkey,这个特性不能写错:

Castle IOC容器实践之EnterpriseLibrary Configuration Facility<?xml version="1.0" encoding="utf-8" ?>
Castle IOC容器实践之EnterpriseLibrary Configuration Facility
Castle IOC容器实践之EnterpriseLibrary Configuration Facility
<configuration>
Castle IOC容器实践之EnterpriseLibrary Configuration Facility
Castle IOC容器实践之EnterpriseLibrary Configuration Facility    
<configSections>
Castle IOC容器实践之EnterpriseLibrary Configuration Facility
Castle IOC容器实践之EnterpriseLibrary Configuration Facility        
<section name="enterpriselibrary.configurationSettings" type="System.Configuration.IgnoreSectionHandler, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
Castle IOC容器实践之EnterpriseLibrary Configuration Facility
Castle IOC容器实践之EnterpriseLibrary Configuration Facility        
<section name="castle" type="Castle.Windsor.Configuration.AppDomain.CastleSectionHandler, Castle.Windsor" />
Castle IOC容器实践之EnterpriseLibrary Configuration Facility
Castle IOC容器实践之EnterpriseLibrary Configuration Facility    
</configSections>
Castle IOC容器实践之EnterpriseLibrary Configuration Facility
Castle IOC容器实践之EnterpriseLibrary Configuration Facility    
<enterpriselibrary.configurationSettings xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
Castle IOC容器实践之EnterpriseLibrary Configuration Facility
Castle IOC容器实践之EnterpriseLibrary Configuration Facility        defaultSection
="" applicationName="Application" xmlns="http://www.microsoft.com/practices/enterpriselibrary/08-31-2004/configuration">
Castle IOC容器实践之EnterpriseLibrary Configuration Facility
Castle IOC容器实践之EnterpriseLibrary Configuration Facility        
<configurationSections>
Castle IOC容器实践之EnterpriseLibrary Configuration Facility
Castle IOC容器实践之EnterpriseLibrary Configuration Facility            
<configurationSection name="EditorSettings" encrypt="false">
Castle IOC容器实践之EnterpriseLibrary Configuration Facility
Castle IOC容器实践之EnterpriseLibrary Configuration Facility                
<storageProvider xsi:type="XmlFileStorageProviderData" name="XML File Storage Provider" path="../../EditorSettings.config" />
Castle IOC容器实践之EnterpriseLibrary Configuration Facility
Castle IOC容器实践之EnterpriseLibrary Configuration Facility                
<dataTransformer xsi:type="XmlSerializerTransformerData" name="Xml Serializer Transformer">
Castle IOC容器实践之EnterpriseLibrary Configuration Facility
Castle IOC容器实践之EnterpriseLibrary Configuration Facility                    
<includeTypes />
Castle IOC容器实践之EnterpriseLibrary Configuration Facility
Castle IOC容器实践之EnterpriseLibrary Configuration Facility                
</dataTransformer>
Castle IOC容器实践之EnterpriseLibrary Configuration Facility
Castle IOC容器实践之EnterpriseLibrary Configuration Facility            
</configurationSection>
Castle IOC容器实践之EnterpriseLibrary Configuration Facility
Castle IOC容器实践之EnterpriseLibrary Configuration Facility        
</configurationSections>
Castle IOC容器实践之EnterpriseLibrary Configuration Facility
Castle IOC容器实践之EnterpriseLibrary Configuration Facility        
<keyAlgorithmStorageProvider xsi:nil="true" />
Castle IOC容器实践之EnterpriseLibrary Configuration Facility
Castle IOC容器实践之EnterpriseLibrary Configuration Facility    
</enterpriselibrary.configurationSettings>
Castle IOC容器实践之EnterpriseLibrary Configuration Facility
Castle IOC容器实践之EnterpriseLibrary Configuration Facility    
<castle>
Castle IOC容器实践之EnterpriseLibrary Configuration Facility
Castle IOC容器实践之EnterpriseLibrary Configuration Facility        
<facilities>
Castle IOC容器实践之EnterpriseLibrary Configuration Facility
Castle IOC容器实践之EnterpriseLibrary Configuration Facility            
<facility id="configuration" type="Castle.Facilities.EnterpriseLibrary.Configuration.EnterpriseConfigurationFacility, Castle.Facilities.EnterpriseLibrary.Configuration" />
Castle IOC容器实践之EnterpriseLibrary Configuration Facility
Castle IOC容器实践之EnterpriseLibrary Configuration Facility        
</facilities>
Castle IOC容器实践之EnterpriseLibrary Configuration Facility
Castle IOC容器实践之EnterpriseLibrary Configuration Facility        
<components>
Castle IOC容器实践之EnterpriseLibrary Configuration Facility
Castle IOC容器实践之EnterpriseLibrary Configuration Facility            
<component id="editorfontdata" type="ConfigurationQuickStart.EditorFontData, Castle.Facilities.EnterpriseLibrary.Configuration.Tests"
Castle IOC容器实践之EnterpriseLibrary Configuration Facility
Castle IOC容器实践之EnterpriseLibrary Configuration Facility                configurationkey
="EditorSettings" />
Castle IOC容器实践之EnterpriseLibrary Configuration Facility
Castle IOC容器实践之EnterpriseLibrary Configuration Facility            
<component id="editorservice" type="Castle.Facilities.EnterpriseLibrary.Configuration.Tests.EditorService, Castle.Facilities.EnterpriseLibrary.Configuration.Tests" />
Castle IOC容器实践之EnterpriseLibrary Configuration Facility
Castle IOC容器实践之EnterpriseLibrary Configuration Facility        
</components>
Castle IOC容器实践之EnterpriseLibrary Configuration Facility
Castle IOC容器实践之EnterpriseLibrary Configuration Facility    
</castle>
Castle IOC容器实践之EnterpriseLibrary Configuration Facility
Castle IOC容器实践之EnterpriseLibrary Configuration Facility
</configuration>

2.编写数据类文件:

Castle IOC容器实践之EnterpriseLibrary Configuration Facilitypublic class EditorFontData
}

3.采用XML方式的存储

Castle IOC容器实践之EnterpriseLibrary Configuration Facility<?xml version="1.0" encoding="utf-8"?>
Castle IOC容器实践之EnterpriseLibrary Configuration Facility
Castle IOC容器实践之EnterpriseLibrary Configuration Facility
<EditorSettings>
Castle IOC容器实践之EnterpriseLibrary Configuration Facility
Castle IOC容器实践之EnterpriseLibrary Configuration Facility  
<xmlSerializerSection type="ConfigurationQuickStart.EditorFontData, Castle.Facilities.EnterpriseLibrary.Configuration.Tests, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null">
Castle IOC容器实践之EnterpriseLibrary Configuration Facility
Castle IOC容器实践之EnterpriseLibrary Configuration Facility    
<EditorFontData xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
Castle IOC容器实践之EnterpriseLibrary Configuration Facility
Castle IOC容器实践之EnterpriseLibrary Configuration Facility      
<Name>Microsoft Sans Serif</Name>
Castle IOC容器实践之EnterpriseLibrary Configuration Facility
Castle IOC容器实践之EnterpriseLibrary Configuration Facility      
<Size>9.25</Size>
Castle IOC容器实践之EnterpriseLibrary Configuration Facility
Castle IOC容器实践之EnterpriseLibrary Configuration Facility      
<Style>0</Style>
Castle IOC容器实践之EnterpriseLibrary Configuration Facility
Castle IOC容器实践之EnterpriseLibrary Configuration Facility    
</EditorFontData>
Castle IOC容器实践之EnterpriseLibrary Configuration Facility
Castle IOC容器实践之EnterpriseLibrary Configuration Facility  
</xmlSerializerSection>
Castle IOC容器实践之EnterpriseLibrary Configuration Facility
Castle IOC容器实践之EnterpriseLibrary Configuration Facility
</EditorSettings>

4.使用数据类的组件

Castle IOC容器实践之EnterpriseLibrary Configuration Facilitypublic class EditorService
}

5.在容器中使用数据类

Castle IOC容器实践之EnterpriseLibrary Configuration Facility[TestFixture]
Castle IOC容器实践之EnterpriseLibrary Configuration Facility
public class FacilityTestCase
}

可以看到,使用EnterpriseLibrary Configuration Facility非常的简单。最后还要注意一点,使用这个Facility需要安装Enterprise Library,因为它依赖于:

Castle IOC容器实践之EnterpriseLibrary Configuration FacilityMicrosoft.Practices.EnterpriseLibrary.Common.dll
Castle IOC容器实践之EnterpriseLibrary Configuration Facility
Castle IOC容器实践之EnterpriseLibrary Configuration FacilityMicrosoft.Practices.EnterpriseLibrary.Configuration.dll

三.原理分析

下面对这个Facility的原理做一下简单的分析。在初始化的时候,它注册了一个名为EntLibConfigurationInspector的分发器

Castle IOC容器实践之EnterpriseLibrary Configuration Facilitypublic class EnterpriseConfigurationFacility : AbstractFacility
}

EntLibConfigurationInspector中为ComponentModel注册一个CustomComponentActivator类型的Activator,这个CustomComponentActivator的实现为EntLibComponentActivator

Castle IOC容器实践之EnterpriseLibrary Configuration Facilityinternal class EntLibComponentActivator : AbstractComponentActivator
}


好了,关于EnterpriseLibrary Configuration Facility就简单的介绍到这里。

更多Castle文章可以访问:《Castle 开发系列文章

 

参考资料

Castle的官方网站http://www.castleproject.org

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-09-06
  • 2022-12-23
  • 2021-09-03
猜你喜欢
  • 2021-09-07
  • 2021-09-24
  • 2021-09-28
  • 2022-01-29
  • 2021-07-20
  • 2021-08-19
相关资源
相似解决方案