【发布时间】:2012-04-11 09:16:02
【问题描述】:
我有一个简单的问题。
假设我有一个 .Net 解决方案,有不同的项目,如一些类库(bll、dal 等)和一个可以是 Web 应用程序或 wpf 应用程序的主项目,这没关系。
现在假设我想使用 IoC 容器(如 Windsor、Ninject、Unity 等)来解析验证器、存储库、通用接口实现等内容。
我把它们放在一起。编译并运行良好。然后,有一天,我添加了一个新服务,并在我的代码中尝试通过 IoC 容器解决它。问题是,我忘记在 IoC 配置中注册它。
一切都编译完毕,应用程序被部署并运行。一切正常,除了页面代码向容器请求新服务,而容器回答“嘿,我对这个服务一无所知”。
您会记录您的错误,以及用户友好的错误页面。您将去检查错误,查看问题并修复它。很标准。
现在假设我们想要改进流程,并且以某种方式能够在编译时知道我们期望 IoC 容器处理的每个服务是否在代码中正确注册。
如何做到这一点?一件事,单元测试被排除在可能的答案之外,我正在寻找另一种方法,如果它确实存在的话。
想法?
编辑 - 在一些答案和 cmets 之后,似乎单元测试确实是实现此功能的唯一方法。
我想知道的是,如果单元测试 - 出于任何原因 - 不可能,因此无法在编译时测试 IoC,这是否会阻止您使用 IoC 容器并选择直接实例化所有在你的代码上?我的意思是,您是否认为使用 IoC 和后期绑定太不安全和太冒险了,并且认为它的优势被这个“缺陷”所超越?
【问题讨论】:
-
正如@Chriseyre2000 在他的回答中指出的那样,单元测试是检查 IoC 配置的一种非常有效的方法,因此您可能会重新评估不进行测试的决定。对此的替代方法是手动测试网站中的每个页面是否加载。
-
这不是一个决定,我想知道除了单元测试之外是否还有另一种一致且可靠的方法来实现这一目标,这是我目前知道的唯一方法。跨度>
-
为什么不能使用单一方法单元测试?
-
我在谈论 IoC,我被告知 IoC 不是“编译时安全的”和“单元测试增加了更多的复杂性并且更难维护”。所以我认为我遗漏了一些东西(因为我通常使用 IoC,当事情变得复杂时,我会进行一些测试)并且我在这里询问是否有比我更有经验的人可以告诉我这样做的更好方法,或者确认事实上,IoC 是一种不好的做法,因为它允许您编译但在运行时失败。
标签: .net build dependency-injection error-handling inversion-of-control