我想知道,是否有可能要求Unity“不要在解决时包装任何用户异常”?
真的,为什么Unity会对ResolutionFailedException进行包装?它正在改变“建筑服务合同”,恕我直言,使用统一对象初始化的事实应该是透明的,这意味着如果客户端等待来自“new”操作符的IOException示例,它应该将其解包,甚至对象也是使用Unity创建的。
其他IoC容器的行为是否相同?
答案 0 :(得分:2)
因为您的constructors should contain no logic。
我知道这不是一个完全令人满意的答案,但我不知道你可以在Unity中关闭这种行为 - 我也做同意这是一个奇怪的设计决定...
但是,如果你保持你的构造函数简单,你将不会遇到这个问题。
答案 1 :(得分:1)
结帐ResolutionFailedException.InnerException
。
正在改变“建筑服务合同”
什么合同?
恕我直言,使用unity进行对象初始化的事实应该是透明的
IoC容器的一个重点是使对象构建不那么重要,因此开发人员可以专注于增加业务价值。
这意味着如果客户端等待来自“new”运算符的IOException示例,它应该将其解包,甚至对象也是使用Unity创建的。
哇,客户端正在使用期望IOException
的容器?我想你可能会误用你的IoC容器。
答案 2 :(得分:1)
Unity包装异常的原因是合同 - Resolve方法的合同。
当Resolve抛出时,应用程序应该捕获什么?假设你确实解决了一个你知道抛出IOException的类。因此,您可以在解析调用周围找到该异常的捕获。
然后实施改变。或者只是配置。现在这些服务还有别的东西。
现在您的配置更改需要更改代码。不好。
第二个原因是,对于包装异常,容器可以放置有关解决过程中故障发生位置的诊断信息。
答案 3 :(得分:0)
我有类似的需求,并在此处找到了解决方案:catch all unhandled exceptions in ASP.NET Web Api
以下是我在查看链接文章的答案时所学到的内容: