Использование Mef, чтобы иметь плагин переопределить основной интерфейс - PullRequest
2 голосов
/ 10 марта 2011

Мы исследуем использование MEF для плагина / IoC-решения.

Концепция заключается в том, что основной проект является рабочим экземпляром. Плагин затем заменит любой экспорт в ядре, которое он содержит.

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

Как сделать так, чтобы каталог плагинов перезаписывал существующий экспорт каталога сборки?

1 Ответ

2 голосов
/ 10 марта 2011

В этом примере любой экспорт, найденный в подпапке 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;
...