C# Unity将异常包装为ResolutionFailedException。如何避免?
我想知道,有没有可能问Unity“在解析时不要包装任何用户异常” 真的,为什么统一包装解决方案失败了?它正在改变“构建服务合同”,即使用unity初始化对象的事实应该是透明的,这意味着如果客户机等待“new”操作符的IOException,它也应该将其展开,即使对象是使用unity创建的C# Unity将异常包装为ResolutionFailedException。如何避免?,c#,inversion-of-control,unity-container,C#,Inversion Of Control,Unity Container,我想知道,有没有可能问Unity“在解析时不要包装任何用户异常” 真的,为什么统一包装解决方案失败了?它正在改变“构建服务合同”,即使用unity初始化对象的事实应该是透明的,这意味着如果客户机等待“new”操作符的IOException,它也应该将其展开,即使对象是使用unity创建的 其他IoC容器的行为是否相同?签出ResolutionFailedException.InnerException 正在更改“施工服务合同” 什么合同 使用unity初始化对象的事实应该是透明的 IoC容器的一
其他IoC容器的行为是否相同?签出
ResolutionFailedException.InnerException
正在更改“施工服务合同”
什么合同
使用unity初始化对象的事实应该是透明的
IoC容器的一个要点是减少对对象构造的关注,以便开发人员能够专注于增加业务价值
这意味着,若客户机等待来自“new”操作符的IOException,那个么即使对象是使用Unity创建的,它也应该将其展开
哇,哪个客户端正在使用期望IOException
的容器?我认为您可能误用了IoC容器。因为您的
我知道这不是一个完全令人满意的答案,但我不知道你可以在Unity中关闭这个行为-我也同意这是一个奇怪的设计决定
但是,如果您让构造函数保持简单,您就不会有这个问题。Unity wraps例外的原因都与契约有关——解析方法的契约 当Resolve抛出时,应用程序应该捕获什么?假设您确实解析了一个引发IOException的类。因此,您在resolve调用周围放置了一个异常捕获 然后,实现发生了变化。或者只是配置。现在,服务部门抛出了其他东西 现在,您有了一个需要更改代码的配置更改。不太好
第二个原因是,在包装异常的情况下,容器可以放置诊断信息,说明故障发生在解决过程的何处。我也有类似的需要,并在这里找到了解决方案: 下面是我在回顾链接文章的答案时学到的:
- 如果您只想捕获异常并记录它们,那么添加一个IEExceptionLogger
- 如果要捕获异常并操纵响应,请替换IEExceptionHandler
- 这两种解决方案都不能捕获所有异常。我仍在使用Application\u Error捕获ApicController方法中未捕获的异常