2011-10-11 21 views
0

我希望能夠做到這一點分享溫莎城堡單一實例:跨多個組件

<component id="Component1" service="Foo.IFoo, Foo" type="Foo.Bar, Foo" lifestyle="singleton" /> 
<component id="Component2" service="Foo.IFoo, Foo" type="Foo.Bar, Foo" lifestyle="singleton" /> 

這樣,當我這樣做:

IFoo foo = m_container.Resolve<IFoo>("Component1"); 

或者這樣:

IFoo foo = m_container.Resolve<IFoo>("Component2"); 

..我得到相同的單例實例,而不是每個組件的單獨實例。

這可能嗎?

謝謝。

+3

如果你只需要一個組件,爲什麼要註冊兩個組件? –

+0

在實際的代碼中,組件名稱是一個接口名稱。我希望能夠將ISomething映射到單例實例,並將ISomethingElse映射到同一個實例。 我必須在運行時關閉所有接口名稱,所以我需要通過城堡配置查找共享實例。 – Michael

+0

我已經在不使用Castle的情況下解決了這個問題,但如果可能的話我想使用它。它用於緩存,其中N個接口解析爲任何給定的緩存實例,因此我可能需要多個組件用於一個單例實例。 – Michael

回答

0

如果你所擁有的是運行時的接口「名稱」你打算如何調用Windsor容器上的通用Resolve <>方法?如果你忠實地只想要的IFoo的一個單一實例無論comopnent「名稱」,此後只登記一個作爲一個獨立的,並呼籲:

IFoo foo = m_container.Resolve<IFoo>(); 

如果你正在尋找有多個接口,返回你可以看看同一組件使用轉發類型。