mef - CompositionBatch 和目录之间有什么区别?

标签 mef

我正试图让我的大脑围绕 MEF,而我正在努力解决的一件事是 CompositionBatch .

CompositionBatch 似乎是一种向 MEF 系统添加或删除导出的方法,但显然它 can't remove something that was added via a catalog ,所以用处有限。出于某种原因,它还在容器级别运行,而不是在目录级别与在 MEF 中注册类型的所有其他内容一起运行。

据我所知,CompositionBatch 只是一种多余的方式来做你已经可以用目录做的事情。如果我想在我的应用程序启动后注册两个新类型,我不需要 CompositionBatch;我也可以将一个 AggregateCatalog 传递给我的容器,然后当我准备好时,从我想要注册的两个新类型创建一个 TypeCatalog,将它添加到 AggregateCatalog,一切都会正常工作。还有 CompositionBatch,它通过向容器添加方法来解决这个目录问题。

我错过了什么?为什么存在 CompositionBatch?事实上,它会做一些你不能用已经存在的东西做的事情吗?为什么我们需要一种在容器级别做同样事情的方法?

最佳答案

如果类型在目录中,MEF 将在需要时创建该类型的对象。 CompositionBatch 允许您将对象添加到您自己创建的合成中。我们通常建议坚持使用目录,但在某些情况下,您需要自己创建对象,或者它是由某个其他组件(例如 XAML 解析器)创建的,并且您需要将其放入容器中。

关于mef - CompositionBatch 和目录之间有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5534240/

相关文章:

mvvm - 使用 MEF 动态加载 xap 时如何将参数传递给 xap 文件?

mef - Visual Studio 如何在 VSIX 项目中查找 MEF 组件?

configuration - MEF 插件有自己的配置文件吗?

c# - 如何动态创建功能区选项卡?

c# - MEF 不适用于 Windows 8.1 或更高版本的设备

c# - MEF + WPF + MVVM : Where should AggregateCatalog reside?

c# - Visual Studio 2010 扩展获取选定的文本

c# - MEF GetExports<T, TMetaDataView> 不返回任何内容,AllowMultiple = True

.net - Prism:EventAggregator 和 MEF - EventAggregator 的 2 个不同实例

wpf - Prism:创建外壳后将模块加载到目录中