2011-03-11 60 views
0

我想解析來自不同線程的同一個對象。但是,當我在一個線程中處理(拆除)一個對象並在另一個線程中解析它時,我會得到兩個不同的對象,儘管對象需要在整個應用程序中成爲一個單例。 LifetimeManager是一個ContainerControlledLifetimeManager,它應該像單例一樣,但是當我有多個線程時它不會。解決來自多個線程的單例對象

我該怎麼處理這個問題?

更多詳細信息: 我認爲問題的一部分可能是,我在一個線程中註冊一個新的類型映射。儘管我已經同步了這個調用,但UnityContainer似乎對先前構建的項目持有引用,並將其提供給調用解析的線程。註冊新類型映射的線程獲取新項目就好了。

+0

愚蠢的問題,但讓我們澄清一些事情:容器在所有線程中共享還是每個線程都有自己的實例? – jason 2011-03-11 14:10:15

+0

只有一個容器爲整個應用程序設置。 – Falcon 2011-03-11 14:11:56

+0

您可以添加一些更多的細節,很好添加一個代碼片段 – BreakHead 2011-03-11 14:40:54

回答

1

ContainerControlledLifetimeManager將解析的實例保存在私有非靜態字段中。它通常被稱爲單例,但真正的意義是每個生命週期的單例管理器實例。一旦你再次註冊類型,它將得到ContainerControlledLifetimeManager的新實例,並且這個生命期管理器的實例將保存它自己的已解析類型的實例。

簡單:兩種不同的類型註冊=兩個不同的「單身人士」。

+0

謝謝,這意味着我需要實現我自己的一生經理。 – Falcon 2011-03-12 19:56:43