2010-07-23 48 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

相關問題