使用Mef让插件覆盖Core接口

时间:2011-03-09 22:24:59

标签: ioc-container mef

我们正在研究将MEF用于插件/ IoC解决方案。

这个概念是核心项目是一个工作实例。然后,该插件将替换它包含的Core中的任何Exports。

var catalog = new AggregateCatalog(
          new AssemblyCatalog(System.Reflection.Assembly.GetExecutingAssembly()),
          new DirectoryCatalog("Plugin"));

如何让插件目录覆盖现有的程序集目录导出?

1 个答案:

答案 0 :(得分:2)

在此示例中,plugin子文件夹中找到的任何导出都将覆盖在应用程序文件夹中找到的导出。它的工作原理是将多个导出提供程序传递给CompositionContainer。第一个出口提供商优先。

var defaultExportProvider = 
    new CatalogExportProvider(new DirectoryCatalog(".","*"));
var pluginExportProvider = 
    new CatalogExportProvider(new DirectoryCatalog(@".\plugin"));
var container = new CompositionContainer(
    pluginExportProvider, defaultExportProvider);
defaultExportProvider.SourceProvider = container;
pluginExportProvider.SourceProvider = container;