如何验证温莎城堡的配置

时间:2010-04-28 18:38:35

标签: validation configuration inversion-of-control castle-windsor ioc-container

我想断言我的注册是有效的,即没有缺少依赖,并且没有循环依赖 我想在我的应用程序中执行此操作(而不是在单元测试中),因此如果配置无效,我将能够快速失败。
我还希望在不解析(并实例化)所有组件的情况下实现这一点 - 仅通过扫描依赖关系图 我怎么能这样做?

动机是配置复杂应用程序的反复试验性质。我希望在容器配置错误的情况下获得快速失败的行为。

BTW - 我的灵感来自AutoMapper的AssertConfigurationIsValid()方法。

1 个答案:

答案 0 :(得分:5)

你不能百分百肯定,因为温莎是一个充满活力的有机体,并不是所有东西都可以静态分析。所有处理程序可能处于WaitingDependency状态,但您的应用可能100%正常工作,因为在解决时,依赖关系将由DynamicParametersISubDependencyResolverILazyComponentLoader提供。< / p>

有计划将您提到的这项功能纳入温莎,但鉴于上述限制,它很少会提供任何价值。

我建议使用良好,可靠的可验证约定来决定容器中的内容以及不适用的内容,以及通过解析组件来测试容器的良好单元测试。

如果你不介意得到假阴性,你可以做以下事情:

var allHandlers = container.Kernel.GetAssignableHandlers(typeof(object));

然后迭代它们并检查它们是否都是Valid,但我宁愿为此进行专门的测试。 Take a look at this post for example

配置应用程序不一定是试验和错误,也不应该是。这是一个很好的惯例,并坚持他们。我有两篇关于它的帖子你可能会觉得很有用: