【发布时间】:2013-08-20 04:14:55
【问题描述】:
我正在查看 Orchard CMS 项目的源代码,我注意到他们的一些构造函数从未验证所需的参数不为空。起初,我认为这很奇怪。我问自己,“考虑到你说这个依赖是必需的,你不想检查你是否真的有一个吗?”意识到该项目使用 Castle Windsor 作为 IoC 容器,我后来想,“好吧,当容器试图找到具有需求的对象的依赖项时,它会抛出异常。”所以我的问题是,当我知道 IoC 容器会为我检查时,我还应该检查吗?
或者双重检查是好的,因为从某种意义上说,我坚持反向封装原则:“我不知道我是如何获得这种依赖关系的,但我真的需要一个!”
【问题讨论】:
-
这是 Mark Seemann 关于这个主题的一篇有趣的文章:blog.ploeh.dk/2013/07/08/defensive-coding
-
谢谢你....我已经成为马克的粉丝了。我一直说你应该在处理之前检查方法的要求,因为它可以在遇到问题时更容易地进行故障排除。
-
说实话,现在我不再检查由容器连接的类的构造函数参数了。我知道我的容器(和大多数容器)永远不会允许将 null 注入构造函数。因此,在这种情况下省略检查是安全的,并使代码更易读、更易于维护。
标签: c# design-patterns ioc-container