1

加载依赖程序集我与依赖注入(DI从现在起)努力解决组件和正找一个优雅的解决方案在.NET环境中加载依赖程序集。作为解释,假设我们有3个程序集,A,B和C,其中A取决于B,而B取决于C.现在我需要从程序集A载入组件,但是因为我使用的是DI,所以我没有有对程序集A的引用。即使对程序集A的引用也不够,因为我需要确保A,B和C都在我的输出目录中结束。依赖注入和.NET

所以,一些明显的解决方案是:
- 从执行应用程序添加到A,B和C的引用:需要依赖结构,于我而言,是极其复杂的,使这有点不想要的解决方案的知识。
- 将这些dll添加到GAC:在我的情况下,不是一个选项。


所以我想知道如果有人有这个问题的优雅解决方案。不确定它是否相关,但我正在使用Castle Windsor作为DI。

感谢
乔尼

+1

为什么你的依赖非常复杂?这看起来像代码味道给我。 – 2010-06-24 17:12:39

+1

我不认为他们异常复杂。复杂。与大多数企业应用程序一样。我只是不希望依赖结构的知识成为任何试图将测试应用程序或类似程序放在一起的人的必需品。 – joniba 2010-06-26 10:42:00

回答

1

它会买你动态加载程序集?

你应该只引用添加A,B和C在执行应用程序,除非你正在编写设计由其他单位进行扩展的应用程序,或者你必须改变依赖非常频繁。

否则,你正在解决一个小问题(需要重新编译部署的变化)通过引入不同的问题(在运行时发生故障的可能性)。

觉得作为应用程序的构造函数的参数引用列表的 - 你的应用程序应该明确宣布每天进食他们走在配置文件中的它的依赖来代替。

+0

基本上我同意你的意见。我只是在寻找人们用来解决这个问题的其他选择。就我而言,尤其需要了解很多知识才能知道哪些依赖性需要添加到用人项目中,因为依赖性结构非常复杂。我已更新该帖子以反映这一点。 – joniba 2010-06-24 16:40:20

5

有您的AppDomain称为AssemblyResolve,让你有机会加载缺失的组件的事件。这使您可以从您提供的任何流中加载缺少的程序集,例如不同文件夹中的文件或存储在数据库中的文件。

+0

这可能是迄今为止我见过的最佳选择。谢谢。 – joniba 2010-06-26 10:43:27

+0

只是想说,我发现所有的答案有帮助。如果我能的话,我会把它们都标记为答案。谢谢! – joniba 2010-12-27 17:04:22

1

如果您有唯一的问题是获得组件的输出目录比这不是一个问题,温莎 - 这是一个问题的MSBuild(或南特或任何你正在使用建项目)。请让脚本去做。如果你正在寻找可扩展性场景,那就是你在目录中有程序集,并且你想加载它们,Windsor 2.5(当前主干)对此也有相当不错的支持,无论是从XML还是从流利的API。

+0

只是想说,我发现所有的答案有帮助。如果我能的话,我会把它们都标记为答案。谢谢! – joniba 2010-12-27 17:03:28