2011-03-31 33 views
0

我想將我的大部分接口映射到我的app.config文件中的具體類。不過,我想在運行時向同一個Unity目錄註冊一些接口。我想下面的代碼,但它給了我一個SynchronizationLockException: Object synchronization method was called from an unsynchronized block of code.如何在運行時擴展Unity目錄?

IUnityContainer container = new UnityContainer(); 

UnityConfigurationSection configSection = 
    (UnityConfigurationSection)ConfigurationManager.GetSection("unity"); 
configSection.Containers.Default.Configure(container); 

container.RegisterInstance<IInterface>(new ConcreteObject()); 

我怎樣才能從app.config中初始化一個統一目錄登記在運行時的對象?

我正在使用Prism4附帶的Unity版本(2.0)。

回答

0

這是一個常見的問題,但在技術上不是一個錯誤,註冊統一對象。將您的註冊表更改爲:

container.RegisterType<IInterface, ConcreteObject>(new ContainerControlledLifetimeManager()); 

這應該可以解決您的問題。

這個例外得到投擲,因爲這樣的:

Can Unity be made to not throw SynchronizationLockException all the time?

+0

謝謝你的指針,但我怎麼傳遞對象實例? – MvdD 2011-03-31 16:56:49

+0

當你要求時,應該爲你創建實例。 – poindexter12 2011-03-31 17:05:56

+1

是的,但我不希望它新增一個新實例。我希望它能夠在運行時返回一個在容器中註冊的實例。 – MvdD 2011-03-31 19:24:06