如何在注册时将组件实例化为Singleton?

jam*_*ind 6 c# castle-windsor

我可以想象这在Castle中可能会非常直接,但我对这项技术不熟悉并且谷歌搜索了好几个小时没有运气!

我有以下内容:

container.Register(
Component.For<MySpecialClass>().UsingFactoryMethod(
    () => new MySpecialClass()).LifeStyle.Singleton);
Run Code Online (Sandbox Code Playgroud)

现在非常正确,这是延迟加载的,即传递给UsingFactoryMethod()的lambda表达式在我实际要求Castle解析类的实例之前没有被执行.

但是我希望Castle在我注册后立即创建实例.这可能吗?

Mau*_*fer 10

对于这个简单的情况,您只需注册一个现有实例:

var special = new MySpecialClass();
container.Register(Component.For<MySpecialClass>().Instance(special));
Run Code Online (Sandbox Code Playgroud)


Mos*_*evi 10

您可以使用构建它的Startable工具,如下所示:

container.AddFacility<StartableFacility>();
container.Register(Component.For<MySpecialClass>().LifeStyle.Singleton.Start());
Run Code Online (Sandbox Code Playgroud)

你可以在这里阅读它