如何注入在 Windsor 注册的 MEF [ImportingConstructor] 依赖项?

Posted

技术标签:

【中文标题】如何注入在 Windsor 注册的 MEF [ImportingConstructor] 依赖项?【英文标题】:How do I inject MEF [ImportingConstructor] dependencies registered with Windsor? 【发布时间】:2014-03-18 00:46:55 【问题描述】:

我正在开发一个当前使用 Windsor 作为 DI 框架的 C#/MVC 应用程序,并且刚刚开始探索 MEF 以使该应用程序更具可扩展性。它一直运行良好,直到我的插件需要满足依赖关系为止。

如何将 Windsor 托管依赖项注入到由 MEF 导入的类中,最好使用 [ImportingConstructor]?

我尝试从 MefContrib 扩展 ContainerAdapterBase,但不知道如何让它与 [ImportingConstructor] 一起使用。此外,不能将 MEF 用于 IoC。

谢谢!

【问题讨论】:

您是否考虑过使用 Windsor 而不是使用 MEF 创建插件(我对 MEF 不是很熟悉,但 Windsor 是超级可扩展的)。 我喜欢使用 MEF 的想法,因为它非常简单,并且是它的设计目的,并且支持 Windsor 不喜欢在运行时丢弃的 DLL 中拾取类的一些东西。我宁愿在所有事情上都使用 Windsor,但感觉有点像在不合适的地方硬拉它。 【参考方案1】:

更新: 我目前的解决方案是编写一个由 Windsor 管理的简单“DSL”,它提供插件所需的所有功能,然后每当 MEF 向我传递一个插件实例时手动注入它。可能有点讨厌,但它有效,这也意味着我不必从插件中做任何服务位置,并且还为插件“允许”做什么提供了一个很好的边界。

非常感谢您对这种方法的任何想法。

【讨论】:

我现在正在使用 MEF 和 Unity 解决同样的问题。愿意发布一些关于您如何解决问题的线索吗? 不幸的是,我们在大约一年后放弃了 MEF 方法,我无法再访问代码了,抱歉……DSL 方法在需要时运行良好。

以上是关于如何注入在 Windsor 注册的 MEF [ImportingConstructor] 依赖项?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Castle Windsor 进行 WCF 依赖注入 - 请帮忙?

Windsor - 从容器中拉出瞬态对象

Castle.Windsor依赖注入的高级应用_Castle.Windsor.3.1.0

Castle.Windsor依赖注入的高级应用

依赖注入 Castle.Windsor高级应用

Castle Windsor 学习-----Installer的几种安装方式