Search code examples
c#castle-windsor

How do I Instantiate component as Singleton at registration?


I can imagine this might be quite straight forward to do in Castle but I'm new to the technology and have been Googling for hours with no luck!

I have the following:

container.Register(
Component.For<MySpecialClass>().UsingFactoryMethod(
    () => new MySpecialClass()).LifeStyle.Singleton);

Now quite rightly this is being lazy-loaded, i.e. the lambda expression passed in to UsingFactoryMethod() isn't being executed until I actually ask Castle to Resolve me the instance of the class.

But I would like Castle to create the instance as soon as I have registered it. Is this possible?


Solution

  • You can just use the built it Startable facility like so:

    container.AddFacility<StartableFacility>();
    container.Register(Component.For<MySpecialClass>().LifeStyle.Singleton.Start());
    

    You can read about it here