0

我以为我对 Unity 了解很多,但以下场景我没有例外。我正在使用 Unity Container 将我的 Prism 视图注册为具有命名注册的对象,如下所示:

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

我通过调用请求视图实例

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

到目前为止,一切都很好。现在我在我的系统中发现了一个错误,因为我使用了错误的名称来解析视图的实例,并且我预计 Unity 会抛出一个异常。

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

但是 Unity 不会抛出任何异常(例如ResolutionFailedExceptionor ActivationException)。当我执行上面的调用时,它会返回一个 new object,而不会使用给定的(错误的)名称注册任何视图。

这是 Unity 的正确行为吗?我真的希望在这里得到一个例外。在 Prism 的范围内,这是一个问题,因为在导航到错误的目标(视图)期间我不会遇到任何异常。

4

1 回答 1

1

我和你一样,这是出乎意料的行为。我认为问题源于您正在尝试解决具体类的实例(在您的情况下object)。看起来 Unity 将始终尝试解决该实例。只要它能做到这一点,它就会忽略命名映射。

我尝试了一个基类 ( ViewBase),除非您声明它,否则容器也将解析它abstract。这样做会引发预期的异常。

如果您引入应该解决您的问题的接口或抽象基类。

您应该为 Unity 开一个 bug 票

于 2013-02-26T11:33:15.733 回答