Dependency injection 我可以急切地使用castle windsor实例化注册为单例的实例吗?
在castle windsor中,当使用单例生命周期注册实例时,有没有一种方法可以急切地实例化它们(而不是在第一次注入它们时让它们初始化) 更新: 我想更多的细节在这里会有所帮助:Dependency injection 我可以急切地使用castle windsor实例化注册为单例的实例吗?,dependency-injection,castle-windsor,Dependency Injection,Castle Windsor,在castle windsor中,当使用单例生命周期注册实例时,有没有一种方法可以急切地实例化它们(而不是在第一次注入它们时让它们初始化) 更新: 我想更多的细节在这里会有所帮助: 这些实例包含一些有利于在启动时运行的初始化代码,这就是为什么我对这样做感兴趣 我正在使用AllTypes.Pick()注册其中相当多的实例,因此我更喜欢一种解决方案,它不需要我在构建容器后手动从容器中分别解析每个实例 是的,您可以使用Startable设备(Windsor自带): container.AddFacil
AllTypes.Pick()
注册其中相当多的实例,因此我更喜欢一种解决方案,它不需要我在构建容器后手动从容器中分别解析每个实例是的,您可以使用Startable设备(Windsor自带):
container.AddFacility(
//在v2.5中可选
f=>f.DeferredStart()
);
集装箱。登记(
AllTypes.FromThisAssembly()
.Pick().WhateverYouWant()
.Configure(c=>c.Start());
DeferredStart
方法在v2.5中是新的,它的作用以及建议使用它的原因。示例在v2.5中使用了一些新的API,但是如果您使用v2.1,它应该让您了解如何实现这一点
在以前的版本中,方法
Start()
被称为Startable()
谢谢!这正是我想要的。还有一个问题……我的“Start”逻辑在组件的构造函数中被调用;那么如何使用此方法使其工作?使用Start
method,它将-仅实例化对象。如果组件上有具有可启动逻辑的方法,请使用StartUsingMethod(c=>c.YourStartMethod)
换句话说,我展示的示例正是您想要的。好吧……我明白了;这相当于以前版本中的c=>c.Startable()。难怪他们改变了这一点,这有点让人困惑:)
container.AddFacility<StartableFacility>(
// optionally in v2.5
f=> f.DeferredStart()
);
container.Register(
AllTypes.FromThisAssembly()
.Pick().WhateverYouWant()
.Configure(c => c.Start());