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.
Asked
Active
Viewed 1,018 times
0
-
duplicate: http://stackoverflow.com/questions/367178/usage-of-ioc-containers-specifically-windsor – Mauricio Scheffer Oct 15 '09 at 15:27
2 Answers
1
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();

Dala
- 1,869
- 2
- 20
- 22
-
2note that you should *really* try to avoid calling directly the container, otherwise you're using the container as a service locator, bad practice. – Mauricio Scheffer Oct 15 '09 at 15:26
0
Small remark on Dala's answer. I guess the public T Resolve<T>() method should also be static?

Rob van Groenewoud
- 1,824
- 1
- 13
- 17
-
@Rob - if you have a remark about Dala's answer, you should add it in the comment section of Dala's answer ;-) – Metro Smurf Oct 15 '09 at 14:50
-
@ Metro Smurf: I know, but my current reputation level only lets me add comments to my own answers. Once I'm upvoted some more here and there, I'd be able to use the comments as you suggest. – Rob van Groenewoud Oct 15 '09 at 15:05