2010-07-23 47 views
2

在windsor城堡中,当注册具有单例生命周期的实例时,是否有办法急切实例化它们(而不是在第一次注入时初始化它们)?我可以使用castle windsor热切地实例化注册为单例的实例吗?

更新:

我想通一些更多的细节会在这里有所帮助:

  1. 这些实例包含一些初始化代码,这将是有利的,在启动时运行,这就是为什么我很感兴趣在这样做。
  2. 我注册了很多使用AllTypes.Pick()的实例,所以我更喜欢一个解决方案,它不涉及我在构建完成后单独从容器手动解析每个实例。

回答

4

是的,您可以使用可启动基金(其出现与温莎盒子):

container.AddFacility<StartableFacility>(
// optionally in v2.5 
f=> f.DeferredStart() 
); 
container.Register(
    AllTypes.FromThisAssembly() 
     .Pick().WhateverYouWant() 
     .Configure(c => c.Start()); 

DeferredStart方法是在V2.5新you can see here它做什么和为什么它被建议用它。这些示例使用了v2.5中的一些新API,但如果您使用的是v2.1,它应该让您了解如何实现此目的。

在以前的版本中,方法Start()被称为Startable()

+0

谢谢!这正是我所期待的。 – DanP 2010-07-24 00:30:24

+0

另一个问题是......我的“开始”逻辑在组件的构造函数中被调用;那么如何使用这种方法得到这个工作呢? – DanP 2010-07-24 00:33:36

+1

使用'Start'方法,它会 - 只是实例化对象。如果你的组件具有可启动逻辑的方法,使用'StartUsingMethod(c => c.YourStartMethod)' 换句话说 - 我展示的例子完全符合你的要求。 – 2010-07-24 00:42:49

相关问题