托管扩展框架(MEF)和托管加载项框架(MAF,也称为System.AddIn)似乎完成了非常相似的任务。根据这个堆栈溢出问题Is MEF a replacement for System.Addin?,您甚至可以同时使用两者。

您何时选择使用一个与另一个?在什么情况下您会选择同时使用两者?

最佳答案

我一直在评估这些选项,这就是我得出的结论。

MAF是真正的插件框架。您可以完全分离您的插件,甚至可以在单独的应用程序域中运行它们,这样,如果插件崩溃,它就不会关闭您的应用程序。它还提供了一种非常完整的方法来使附加组件脱离耦合,这取决于您提供的契约(Contract)以外的任何内容。实际上,您可以在升级主应用程序时对契约(Contract)适配器进行版本控制,以向后兼容旧插件。虽然这听起来不错,但要跨越应用程序域,您必须付出沉重的代价。您为此付出的代价是速度和来回发送类型的灵活性。

MEF更像是依赖项注入(inject),它具有一些其他好处,例如可发现性和...(为此空白)。 MAF具有的隔离度在MEF中不存在。它们是针对两个不同事物的两个不同框架。

10-05 20:10
查看更多