![]() |
1
2
简短的回答:不,不可能。 这样做需要能够将所有组件及其依赖项(容器元数据)表示为一个图,以便对其进行分析。问题是,容器越复杂,就越难实现这一点。以温莎为例。它的 numerous extension points 使依赖关系过于动态,无法用图形表示。懒惰的组件加载程序、处理程序选择器、工厂、组件模型贡献者、子资源管理器都参与到流程中,它们可以是任意的用户代码,这使得静态分析变得不可能。 静态分析对于一个小容器来说可能是可行的,但是这个假设的容器对于现实项目来说是非常无用的。 因此,和往常一样,这是一个权衡,我们能做的最好的是进行一些测试,测试容器中所有注册组件的实际分辨率。structureMap有一个assertConfigurationInvalid()方法来执行此操作。 即使如此,也可能会有更多未被发现的细微错误,例如 lifestyle issues . |
![]() |
2
5
托管扩展性框架(MEF)可以做到这一点。为了使分析准确,您需要遵循一些最佳实践,但是结果是好的。 要分析一组程序集,使用命令行工具-请参见 http://blogs.msdn.com/b/nblumhardt/archive/2009/08/28/analyze-mef-assemblies-from-the-command-line.aspx . 这可以从Visual Studio或持续集成服务器中的生成脚本运行- http://blogs.msdn.com/b/nblumhardt/archive/2009/09/24/debug-composition-from-within-visual-studio.aspx . 您可以使用Mefcontrib项目的VisualMefx进行可视化(在一组程序集上再次)操作-请参见 http://xamlcoder.com/blog/2010/04/10/updated-visual-mefx/ MEF通过非常声明性(配置的标准属性)和使用一个工作懒散的底层组合模型(它可以在不创建任何实例的情况下构建图)来支持此功能…把你的头围起来。) |
![]() |
3
1
除了Mauricio所说的以外,windsor 2.5还有一个功能,在诊断缺少依赖项的问题或只是查看容器中的组件时,您可能会发现这一功能很有用。
我在博客上写了它的beta版本 here.>它现在非常有用,而且作为温莎的所有东西,它是可扩展的,因此您可以在该列表上列出自己的项目。 当诊断缺少依赖项的问题或只是查看容器中的组件时,您可能会发现这一点很有用。
我在博客上写了它的测试版 here . 现在它非常有用,就像温莎的所有东西一样——它是可扩展的,所以你可以在列表上列出你自己的项目。
|
![]() |
4
0
可能没有依赖注入容器。但是,您可以手动执行依赖项注入,而不需要容器。例如:
如果它编译,那么所有依赖项都存在。 然而,当依赖关系图变得足够大,以至于您无法完全将其保持在您的头脑中时(尤其是在混合中抛出一些循环依赖关系时),麻烦就会出现。如果重构涉及重新排列依赖项,那么调整构造函数调用的顺序将变得非常困难。 |