我认为我知道很多关于Unity的知识,但以下情况除外。 I'm使用Unity容器注册我的棱镜意见,像这样有一个名为准对象:使用命名注册解析实例不会抛出异常
_unityContainer.RegisterType<object, MyDummyView>("MyDummyViewName");
,我通过调用
object view = _unityContainer.Resolve<object>("MyDummyViewName");
到目前为止好请求视图的实例。现在我在我的系统中发现了一个错误,因为我使用了错误的名称来解析一个视图的实例,并且我期望Unity抛出一个异常。
object view = _unityContainer.Resolve<object>("MyWrongDummyViewName");
但团结不抛出任何异常(如ResolutionFailedException
或ActivationException
)。当我执行上面的调用时,它将返回一个新的object
,而不注册具有给定(错误)名称的任何视图。
这是Unity的正确行为吗?我真的希望在这里得到一个例外。在Prism的范围内,这是一个问题,因为在导航到错误的目标(视图)期间,我不会得到任何异常。
感谢您的回答。问题是[棱镜基本区域导航](http://msdn.microsoft.com/en-us/library/gg430861(v = pandp.40).aspx#sec8)需要将我的视图注册为对象。否则导航基础结构不能解析视图 – Jehof 2013-02-26 11:39:33
这是设计行为 - Unity将尝试解析未注册的具体类。由于没有注册(对象,“WhateverName”)它新增了一个对象实例。这不是最佳的,但这并不奇怪。 – 2013-02-27 07:55:16
@ChrisTavares Unity已经在尝试解决具体类的事实是已知的(我记录在案,我相信)。但是它忽略了一个明确指定的映射名称......这与Unity的行为有所不同,当询问一个接口时,至少对我而言*是令人惊讶的。 – 2013-03-01 05:55:46