如何验证温莎城堡的配置

Ome*_*Mor 4 validation configuration castle-windsor ioc-container inversion-of-control

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

动机是配置复杂应用程序的反复试验性质.如果容器配置错误,我宁愿获得快速失败的行为.

顺便说一句 - 我的灵感来自AutoMapper的AssertConfigurationIsValid()方法.

Krz*_*mic 5

你不可能100%确定温莎是一个充满活力的有机体,并不是所有东西都可以静态分析.所有的处理器可能在WaitingDependency状态尚未您的应用程序可能是100%,因为在依赖将通过提供解决问题的时间工作DynamicParameters,ISubDependencyResolverS或ILazyComponentLoader秒.

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

我建议有一个好的,可靠的可验证约定来决定容器中的内容以及什么不是,以及通过解析组件来测试容器的良好单元测试.

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

var allHandlers = container.Kernel.GetAssignableHandlers(typeof(object));
Run Code Online (Sandbox Code Playgroud)

然后迭代它们并检查它们是否都是Valid,但我宁愿为此进行专门的测试.以这篇文章为例.

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