Welcome to part 1... today we're looking at supporting basic configuration in components without additional coding by using the windsor container.
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);
private static void Main(string[] args)
WindsorContainer container = new WindsorContainer(new XmlInterpreter());
TaxCalculator calculator = container.Resolve<TaxCalculator>();
decimal gross = 100;
decimal tax = calculator.CalculateTax(gross);
Console.WriteLine("Gross: {0}, Tax: {1}", gross, tax);
Console.Read();
<configuration>
<configSections>
<section name="castle"
type="Castle.Windsor.Configuration.AppDomain.CastleSectionHandler, Castle.Windsor" />
</configSections>
<castle>
<components>
<component id="taxcalc.service" type="IoC.Tutorials.Part1.TaxCalculator, IoC.Tutorials.Part1" />
</components>
</castle>
</configuration>
<component id="taxcalc.service" type="IoC.Tutorials.Part1.TaxCalculator, IoC.Tutorials.Part1">
<parameters>
<Rate>0.25</Rate>
</parameters>
</component>
Now running the program will display: Gross: 100, Tax: 25.00And that's part 1 done - so now you can see how can we supply configuration parameters, and provide sensible defaults for them.
Next time we'll look at configuring arrays...