我想断言我的注册是有效的,即没有缺少依赖,并且没有循环依赖
我想在我的应用程序中执行此操作(而不是在单元测试中),因此如果配置无效,我将能够快速失败。
我还希望在不解析(并实例化)所有组件的情况下实现这一点 - 仅通过扫描依赖关系图
我怎么能这样做?
动机是配置复杂应用程序的反复试验性质。我希望在容器配置错误的情况下获得快速失败的行为。
BTW - 我的灵感来自AutoMapper的AssertConfigurationIsValid()方法。
答案 0 :(得分:5)
你不能百分百肯定,因为温莎是一个充满活力的有机体,并不是所有东西都可以静态分析。所有处理程序可能处于WaitingDependency
状态,但您的应用可能100%正常工作,因为在解决时,依赖关系将由DynamicParameters
,ISubDependencyResolver
或ILazyComponentLoader
提供。< / p>
有计划将您提到的这项功能纳入温莎,但鉴于上述限制,它很少会提供任何价值。
我建议使用良好,可靠的可验证约定来决定容器中的内容以及不适用的内容,以及通过解析组件来测试容器的良好单元测试。
如果你不介意得到假阴性,你可以做以下事情:
var allHandlers = container.Kernel.GetAssignableHandlers(typeof(object));
然后迭代它们并检查它们是否都是Valid
,但我宁愿为此进行专门的测试。 Take a look at this post for example
配置应用程序不一定是试验和错误,也不应该是。这是一个很好的惯例,并坚持他们。我有两篇关于它的帖子你可能会觉得很有用: