Unity封装了ResolutionFailedException异常.如何避免
本文关键字:何避免 异常 ResolutionFailedException 封装 Unity | 更新日期: 2023-09-27 18:06:22
我想知道,是否有可能要求Unity"在解决时间不包装任何用户异常"?
真的,为什么Unity要包装ResolutionFailedException?它正在改变"建筑服务合同",我认为使用unity初始化对象的事实应该是透明的,这意味着如果客户端等待例如从"new"操作符IOException,它应该得到它的打开,即使对象是使用unity创建的。其他IoC容器的行为是否相同?
因为你的构造函数不应该包含逻辑。
我知道这不是一个完全令人满意的答案,但我不知道你可以在Unity中关闭这个行为-我也做同意这是一个奇怪的设计决定…
查看ResolutionFailedException.InnerException
正在更改"施工服务合同"
什么合同?
使用unity初始化对象的事实应该是透明的
IoC容器的一个要点是使对象构造不那么受关注,这样开发人员就可以专注于增加业务价值。
这意味着如果客户端等待例如IOException从"new"操作符,它应该得到它的打开,即使对象是使用Unity创建的。
哇,哪个客户端正在使用期望IOException
的容器?我认为你可能滥用了你的IoC容器
Unity包装异常的原因是关于合约——Resolve方法的合约。
解析抛出时应用程序应该捕获什么?假设你确实解决了一个你知道会抛出IOException的类。因此,在resolve调用周围为该异常设置了一个catch。
然后实现改变。或者只是构型。现在服务抛出了别的东西。
现在您已经有了一个需要更改代码的配置更改。不好。
使用包装异常的第二个原因是容器有一个位置来放置关于解析过程中发生故障的位置的诊断信息。
我也有类似的需求,并在这里找到了一个解决方案:捕获ASP中所有未处理的异常。. NET Web Api
以下是我从链接文章中获得的答案:
- 如果你只想捕获异常并记录它们,那么添加IExceptionLogger。
- 如果你想捕获异常并操作响应,那么替换 IExceptionHandler。
- 两种解决方案都不能捕获所有异常。我仍然使用Application_Error来捕获在我的ApiController方法中没有捕获的异常。