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

时间:2011-04-04 03:12:34

标签: mef

我正试图将我的大脑包裹在MEF周围,我正在努力的一件事是CompositionBatch

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

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

我错过了什么?为什么CompositionBatch存在?事实上,它是否做了你不能做的事情?为什么我们需要一种方法在容器级别做同样的事情?

1 个答案:

答案 0 :(得分:6)

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