Femaref
Femaref

Reputation: 61437

Castle Windsor lifecycle

Currently, I'm trying to use the WindsorContainer as a mean to get rid of Singletons in my program. After some testing, I realised, that I need a way to keep the WindsorContainer throughout my program, but how? The documentation isn't that good. Could anybody give me an example of a way to use Castle Windsor to create a useable Container throughout my whole program.

Upvotes: 0

Views: 1061

Answers (2)

Dala
Dala

Reputation: 1889

Create a static class that holds the container instance:

public static class IoC
{
     private static IContainer innerContainer;

     public static void Initialize(IContainer container)
     {
          innerContainer = container;
     }

     public static T Resolve<T>()
     {
          return innerContainer.Resolve<T>();
     }

     // wrap more container methods here
}

In your main method (or global.asax if it's an asp.net app) you configure the container and initialize the IoC (Inversion of Control):

static void Main(string[] args)
{
    var container = new WindsorContainer(new XmlInterpreter("castle.xml"));
    IoC.Initialize(container);
}

To resolve an instance you simply use the IoC:

var service = IoC.Resolve<ICustomerService();

Upvotes: 1

Rob van Groenewoud
Rob van Groenewoud

Reputation: 1874

Small remark on Dala's answer. I guess the public T Resolve<T>() method should also be static?

Upvotes: 0

Related Questions