2009-11-06 68 views
3

我剛剛開始與溫莎,所以請溫柔:)我有一個場景,我希望能夠覆蓋/更換放置在windsor容器內的組件。繼續閱讀...如何覆蓋在溫莎城堡註冊的組件?

在我的prod代碼中,我希望能夠註冊實現基類的組件,並使用容器來解析實現者。到目前爲止,使用

container.Register(Component.For<LoggerBase>().ImplementedBy<DebugLogger>()); 

container.Resolve<LoggerBase>(); 

在我的測試,我想補充一個存根/模擬實現覆蓋「DebugLogger」的實施,這樣,當我的督促代碼調用container.Resolve<LoggerBase>();它得到重寫的實現。

任何指針都會受到歡迎!

+0

版本3現在實現'IsDefault'成員,允許您解決此問題。 http://stackoverflow.com/questions/9253388/in-castle-windsor-3-override-an-existing-component-registration/9254043#9254043 – 2012-02-13 02:31:04

回答

3

而不是追逐該路徑,而應該爲不同的場景使用不同的容器實例。每個實例可以配置不同。這是DI容器的重點。一般DI Containers should not be used for unit testing

+0

馬克,感謝您的建議,我沒有想過這種方法。我猜想唯一的缺點是如果我在容器中有大量的註冊並且你想覆蓋單個組件。然而這提供了一個很好的解決方案 - 再次感謝! – 2009-11-06 15:06:09

+0

如果您需要多個幾乎完全相同的容器,則可以創建派生容器,然後使用模板方法設計模式覆蓋其配置不同的位置。 – 2009-11-06 15:26:25