Использование MEF с несколькими проектами в решении - PullRequest
0 голосов
/ 02 октября 2010

У меня есть решение со следующей структурой:

Решение

Main Exe

Утилиты

Когда я использую MEF в проекте Utilities, я нахожу, что ни один из следующих каталогов MEF не подбирает типы, хранящиеся в Main Exe

catalog.Catalogs.Add(new AssemblyCatalog(Assembly.GetExecutingAssembly()));

catalog.Catalogs.Add(new DirectoryCatalog(Path.GetFullPath(AppDomain.CurrentDomain.BaseDirectory)));

Я предполагаю, что первый сбой при вызове в рамках проекта утилит, а второй сбой, поскольку типы в основном проекте хранятся в EXE, а не в DLL ...

Как правильно получить каталог Mef, который находит все типы во всех проектах решения?

Ответы [ 2 ]

3 голосов
/ 02 октября 2010

В моих проектах я просто помещаю команду в события после сборки, которая копирует вывод в основной каталог bin приложений:

XCOPY "$(ProjectDir)$(OutDir)*" "$(SolutionDir)MainApp\bin\*" /y

Затем я просто загружаю из пути корневого каталога:

AggregateCatalog Catalog = new AggregateCatalog();
Catalog.Catalogs.Add(new DirectoryCatalog(root_directory_path, "My.Assemlies.*"));
CompositionContainer Container = new CompositionContainer(Catalog);
Container.ComposeParts(this);
3 голосов
/ 02 октября 2010

Just Spotted Assembly.GetEntryAssembly (), поэтому будет работать следующее

AggregateCatalog catalog = new AggregateCatalog();
catalog.Catalogs.Add(new AssemblyCatalog(Assembly.GetEntryAssembly()));
catalog.Catalogs.Add(new AssemblyCatalog(Assembly.GetExecutingAssembly()));  

, хотя другие типы решения не загружаются - один из вариантов - использовать каталог Каталог, хотя мне интересно, есть ликакой-то способ избежать этого, так как это повышает вероятность введения сторонних типов там, где я не хочу их сразу?

...