我正试图让我的大脑围绕 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/