当组织一个项目时,我应该把用于MEF的提供程序接口放在哪里?目前,我只是将它们放在与其他所有内容相同的项目中,但似乎将它们提取到单独的dll中可能是可取的,这样它就是一个非常小的dll,并且很容易被其他尝试编写扩展的人链接。对此有什么好的做法吗?
与任何插件/扩展模型一样,您应该将“契约”(插件作者应实现的接口)放在一个与应用程序分开的程序集中。
这样,您就可以使该程序集对于插件作者可用,而无需提供整个应用程序,如果它是需要单独许可的商业应用程序,则非常有用。
MEF预览5引入了导出接口的功能(即向接口添加[Export]属性),以便任何实现该接口的对象都可以自动导出。这意味着插件作者甚至不需要知道MEF - 他们只需要实现您的接口,就自动成为MEF扩展。
最初MEF要实现鸭子类型,这意味着您不需要一个公共程序集,但显然这证明过于困难。
我将它们都放在一个公共程序集中,还包括一些有用的抽象基类,可以用来帮助实现接口。
http://ppsinfo.blogspot.com/2009/11/managed-extensibility-framework-mef.html