castle windsor配置

配置

http://www.castleproject.org/container/documentation/v21/manual/windsorconfigref.html

 

<configuration>

    <include uri="uri1" />
    <include uri="uri2" />

    <properties>
        <connection_string>value here</connection_string>
    </properties>
    
    <!-- used to register components before registering the facilities -->
    <bootstrap>

        <component 
            id=""
            service=""
            type=""
            inspectionBehavior="all|declaredonly|none"
            lifestyle="singleton|thread|transient|pooled|custom" 
            customLifestyleType="type that implements ILifestyleManager"
            initialPoolSize="<num>" maxPoolSize="<num>">
            <forwardedTypes>
                <add service="" />
            </forwardedTypes>
            <parameters>
                <paramtername>value</paramtername>
            </parameters>
            
            <interceptors>
                <interceptor>${interceptor.id}</interceptor>
            </interceptors>
        
        </component>
    
    </bootstrap>

    <facilities>
    
        <facility id="" type="Facility full type name">
        
        </facility>
    
    </facilities>
    
    <components>
    
        <component 
            id=""
            service=""
            type=""
            inspectionBehavior="all|declaredonly|none"
            lifestyle="singleton|thread|transient|pooled|custom" 
            customLifestyleType="type that implements ILifestyleManager"
            initialPoolSize="<num>" maxPoolSize="<num>">
            <forwardedTypes>
                <add service="" />
            </forwardedTypes>
            <parameters>
                <paramtername>value</paramtername>
            </parameters>
            
            <interceptors>
                <interceptor>${interceptor.id}</interceptor>
            </interceptors>
        
        </component>
    
    </components>

</configuration>

 

app.config

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

  <castle>      
    <!--出错<inclue uri="assembly://TestCastleWinsorConsoleApp.config.components.config" ></inclue>
    <inclue uri="assembly://TestCastleWinsorConsoleApp.config.components2.config" ></inclue>-->
    
    <!--用绝对路径可以-->    
    <!--<include uri="file://E:\_Projects\vs2008\TestCastleWinsorConsoleApp\TestCastleWinsorConsoleApp\config\components.config"></include>
    <include uri="file://E:\_Projects\vs2008\TestCastleWinsorConsoleApp\TestCastleWinsorConsoleApp\config\components2.config"></include>-->

      <!--<components> 
      <component id="taxcalc.service" type="TestCastleWinsorConsoleApp.TaxCalculator">
        <parameters>
          <Rate>0.2511</Rate>
        </parameters>
      </component>
      <component id="taxcalc.service2" type="TestCastleWinsorConsoleApp.TaxCalculator" >
        <parameters>
          <Rate>0.2522</Rate>
        </parameters>
      </component>
    </components>-->
  </castle>

</configuration>

 

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <components>
    <component id="taxcalc.service1" type="TestCastleWinsorConsoleApp.TaxCalculator">
      <parameters>
        <Rate>0.111</Rate>
      </parameters>
    </component>
    <component id="taxcalc.service2" type="TestCastleWinsorConsoleApp.TaxCalculator" >
      <parameters>
        <Rate>0.222</Rate>
      </parameters>
    </component>
  </components>
</configuration>


 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Castle.Windsor;
using Castle.Windsor.Configuration.Interpreters;
using Castle.Core.Resource;

namespace TestCastleWinsorConsoleApp
{
    public class TaxCalculator
    {
        private decimal _rate = 0.125M;
        public decimal Rate
        {
            set { _rate = value; }
            get { return _rate; }
        }
        public decimal CalculateTax(decimal gross)
        {
            return Math.Round(_rate * gross, 2);
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            
            //WindsorContainer container = new WindsorContainer(new XmlInterpreter( new FileResource("components2.config" ))) ;
            //container.AddChildContainer(new WindsorContainer(new XmlInterpreter( new FileResource("components.config" ))) );

            WindsorContainer container = new WindsorContainer(new XmlInterpreter());
            TaxCalculator calculator = container.Resolve<TaxCalculator>("taxcalc.service1");
            decimal gross = 100;
            decimal tax = calculator.CalculateTax(gross);
            Console.WriteLine("Gross: {0}, Tax: {1}", gross, tax);
            Console.ReadKey();

        }
    }
}

 

 

 

 

 

 

posted @ 2010-12-19 15:29  庚武  Views(1621)  Comments(0Edit  收藏  举报