程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> Castle IOC容器構建配置詳解(一)

Castle IOC容器構建配置詳解(一)

編輯:關於.NET

主要內容

1.配置什麼

2.幾種配置方式

3.Include 介紹

4.Properties介紹

5.條件狀態

一.配置什麼

Castle IOC中並不像Spring.net那樣貫穿著一個思想就是一切皆為配置,對 於對象之間的依賴關系,Castle IOC會自動去連接,因此相比之下它的配置文件 要比Spring.net簡單的多。我們主要配置的就是Component和Facility,所有的 組件配置都放在Components節點中,每一個組件以<Component>開始,以 </Component>結束,其中組件ID必須指定,組件的參數用< parameters >節點來指定:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <components>
    <component id="comp1">
      <parameters>
        <para>component1 para</para>
      </parameters>
    </component>
    <component id="comp2">
      <parameters>
        <para>component2 para</para>
      </parameters>
    </component>
  </components>
</configuration>

所有的擴展單元配置都在Facilities節點中,每一個擴展單元以一個 <Facility>開始,以</Facility>結束:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <facilities>
    <facility id="nhibernate" type="Full Type Name, AssemblyName"></facility>
    <facility id="transaction" type="Full Type Name, AssemblyName"></facility>
  </facilities>

</configuration>

二.幾種配置方式

在Castle IOC中,支持三種方式的配置

l XML方式的配置

l 應用程序配置文件

l 實現接口IconfigurationStore自定義配置

1.XML方式的配置

指定一個自定義的XML作為配置文件,在實例化容器的時候用XmlInterpreter ,簡單的配置文件如下

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <components>
    <component id="txtLog">
      <parameters>
        <target>log.txt</target>
      </parameters>
    </component>
  </components>
</configuration>

初始化容器時的代碼

IWindsorContainer container = new WindsorContainer( new XmlInterpreter("BasicUsage.xml ") );

2.使用應用程序配置文件

用Web.config或者App.config作為配置文件,這種方式的配置在實例化時不 需要指定配置文件,容器會自動去檢查應用程序的配置文件中的Castle IOC配置 區

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="castle" type="Castle.Windsor.Configuration.AppDomain.CastleSectionHandler ,Castle.Windsor" />
  </configSections>
  <castle>
    <components>
      <component id="txtLog">
        <parameters>
          <target>log.txt</target>
        </parameters>
      </component>
    </components>
  </castle>
</configuration>

初始化容器時直接采用默認初始化

IWindsorContainer container = new WindsorContainer(new XmlInterpreter() );

三.Include介紹

有時系統比較復雜,組件會非常的多。如果把這麼多的組件放在了同一個配 置文件裡面去配置,配置文件將變得很大,而且不易閱讀。使用Include可以把 配置文件分開在很多個不同的配置文件中,最後統一在一個XML中或者應用程序 配置文件指定這些分開配置文件的URI。如下面所示,我們有這樣三個配置文件 :

properties.config

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
 <properties>
  <StrConn>MyConnectionString</StrConn>
 </properties>
<properties>
  <TimeOut>500</TimeOut>
 </properties>
</configuration>

facilities.config

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <facilities>
    <facility id="nhibernate" type="Full Type Name, AssemblyName"></facility>
  </facilities>
</configuration>
services.config

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
 <components>
  <component id="ILog"
   type="CastleDemo.DatabaseLog, CastleDemo" />
 </components>
</configuration>

則在Web.config或者App.config中就可以這樣去寫了:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="castle" type="Castle.Windsor.Configuration.AppDomain.CastleSectionHandler , Castle.Windsor" />
  </configSections>
  <castle>
    <include uri="" />
    <include uri="" />
    <include uri="" />
  </castle>
</configuration>

四.Properties介紹

配置文件中,經常我們會遇到一個相同的值在多個地方使用,如數據庫連接 中的字符串,我們要是在每一個用到的地方都配置一遍,如果服務器變了,那所 有的這些地方都得改動,這時可以使用Properties節點來配置,在容器使用配置 信息之前,它將會被配置文件中的另一個Properties來替換,需要替換的地方我 們使用#{}來標識。如

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <properties>
    <connectionString>server=local  ;uid=sa;pwd=sa;database=test</connectionString>
  </properties>
  <components>
    <component id="connectionfactory" service="Company.Project.IConnectionFactory, Company.Project"
      type="Company.Project.DefaultConnectionFactory, Company.Project">
      <properties>
        <connString>#{connectionString} </connString>
      </properties>
    </component>
  </components>
</configuration>

五.條件狀態

配置文件有時候會非常的復雜,Castle IOC支持我們在配置文件中使用條件 選擇或者判斷,這有點像C#預處理指令(如#if,如果你沒有使用過,可以參考 MSDN),可以使用以下的節點:

名稱 示例 define <define flag="DEBUG" /> undef <undef flag="DEBUG" /> if <if defined="DEBUG">
  <interceptors>
    <interceptor>${logging.interceptor} </interceptor>
  </interceptors>
</if> choose <choose>
  <when defined="DEBUG">
    <component id="BasicUsageDebug" />
  </when>
  ……
</choose> when 與choose結合使用 otherwise 與choose結合使用

一個完整的配置示例如下:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <define flag="DEBUG" />
  <components>
    <component id="BasicUsageDemo">
      <if defined="DEBUG">
        <interceptors>
          <interceptor>${logging.interceptor} </interceptor>
        </interceptors>
      </if>
    </component>
    <undef flag="DEBUG" />
    <choose>
      <when defined="DEBUG">
        <component id="BasicUsageDebug" />
      </when>
      <when defined="Complex">
        <component id="ComplexDeme" />
      </when>
      <when defined="Prod">
        <component id="ProdDemo" />
      </when>
      <otherwise>
        <component id="Default" />
      </otherwise>
    </choose>
  </components>
</configuration>

Castle IOC容器的基本配置就到這兒了,在下一篇中會介紹一些復雜類型的 配置及類型轉換。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved