4

我想断言我的注册是有效的,即不存在依赖关系并且没有循环依赖关系。
我想在我的应用程序(而不是单元测试)中这样做,所以如果配置无效,我可以快速失败。
我也想在不解析(并实例化)所有组件的情况下完成该操作 - 只需扫描依赖关系图即可。
关于如何做到这一点的任何想法?我如何验证温莎城堡的配置

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

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

+0

当我碰到一个术语,我不知道,我问我的朋友谷歌。我用“温莎城堡”做了那个,我得到的只是他们女王的英国城堡住宅。我敢打赌,这不是你在说什么,所以请赐教。 – Jay 2010-04-28 18:57:16

+0

周杰伦,也许如果你检查与此相同的标签的其他问题,将为您提供答案... – 2010-04-28 21:03:47

+0

杰伊 - 温莎是从城堡项目的控制容器倒置。在http://www.castleproject.org/ – 2010-04-29 23:59:44

回答

5

因为温莎是一个动态的生物体,而不是一切都可以静态分析,所以你不能100%确定。所有处理程序可能处于WaitingDependency状态,但您的应用程序可能会100%正常工作,因为在解析时,依赖项将由DynamicParameters,ISubDependencyResolver s或ILazyComponentLoader s提供。

有计划将你提到的这个功能加入到Windsor中,但由于上述限制,它很少提供任何价值。

我会建议拥有良好的,可靠的可验证约定来决定什么进入容器和什么不是,以及通过解析组件测试容器的良好单元测试。

如果你不介意的假阴性,你可以做到以下几点:

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

,然后遍历和检查,如果他们都是Valid,但我宁愿有一个专用的测试。 Take a look at this post for example

配置应用程序不一定是试错,也不应该是。这是一个很好的约定,并坚持他们。我有两个职位它可能对您有用:

+1

上查看它的动机当然是配置复杂应用程序的试错性质。我希望在配置错误的容器的情况下获得快速故障行为。 也许你可以提供一个三态验证方法,将返回有效,无效或不确定的结果? 我很少使用温莎的动态功能,而且我相信大部分时间我的错误配置可能会很早被发现。 – 2010-04-29 23:58:55

+0

“配置应用程序不一定是试错,也不应该是。”即使事实并非如此,事实上温莎似乎只是*返回'null'而不是实际抛出错误,当构造一个对象时出现问题使得它很难弄清楚发生了什么。这发生在我身上,例如,当无法建立数据库连接时;我的应用程序后来爆发了一个'NullReferenceException',而不是关于无法连接的有用消息。 – jpmc26 2018-01-20 03:09:02