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(); } } }