2013-02-26 80 views
0

我認爲我知道很多關於Unity的知識,但以下情況除外。 I'm使用Unity容器註冊我的棱鏡意見,像這樣有一個名爲準對象:使用命名註冊解析實例不會拋出異常

_unityContainer.RegisterType<object, MyDummyView>("MyDummyViewName"); 

,我通過調用

object view = _unityContainer.Resolve<object>("MyDummyViewName"); 

到目前爲止好請求視圖的實例。現在我在我的系統中發現了一個錯誤,因爲我使用了錯誤的名稱來解析一個視圖的實例,並且我期望Unity拋出一個異常。

object view = _unityContainer.Resolve<object>("MyWrongDummyViewName"); 

但團結不拋出任何異常(如ResolutionFailedExceptionActivationException)。當我執行上面的調用時,它將返回一個新的object,而不註冊具有給定(錯誤)名稱的任何視圖。

這是Unity的正確行爲嗎?我真的希望在這裏得到一個例外。在Prism的範圍內,這是一個問題,因爲在導航到錯誤的目標(視圖)期間,我不會得到任何異常。

回答

1

我和你在一起,這是意想不到的行爲。我認爲這個問題起源於你試圖解決一個具體類的實例(在你的案例object)。 Unity看起來總是試圖解決這個問題。只要它能做到這一點,它將忽略命名映射。

我嘗試了一個基類(ViewBase),除非你聲明它爲abstract,否則容器也會解析它。這樣做會引起預期的例外。

如果您引入了一個接口或抽象基類來解決您的問題。

您應該打開一個bug ticket for Unity

+0

感謝您的回答。問題是[棱鏡基本區域導航](http://msdn.microsoft.com/en-us/library/gg430861(v = pandp.40).aspx#sec8)需要將我的視圖註冊爲對象。否則導航基礎結構不能解析視圖 – Jehof 2013-02-26 11:39:33

+0

這是設計行爲 - Unity將嘗試解析未註冊的具體類。由於沒有註冊(對象,「WhateverName」)它新增了一個對象實例。這不是最佳的,但這並不奇怪。 – 2013-02-27 07:55:16

+0

@ChrisTavares Unity已經在嘗試解決具體類的事實是已知的(我記錄在案,我相信)。但是它忽略了一個明確指定的映射名稱......這與Unity的行爲有所不同,當詢問一個接口時,至少對我而言*是令人驚訝的。 – 2013-03-01 05:55:46