У меня есть приложение на основе MEF, которое можно настроить с помощью плагинов. Это приложение имеет несколько импортированных частей, и я хочу удалить некоторые из них во время выполнения (чтобы удалить DLL, содержащую их), когда пользователь решает избавиться от этого плагина.
CompositionBatch будет делать то, что мне нужно, но ему нужны ComposablePart
экземпляры в качестве входных параметров для RemovePart()
, и у меня есть только простые объекты, которые реализуют интерфейс ISomething или ComposablePartDefinition
экземпляры в AggregateCatalog
. Поэтому мой вопрос:
- Как найти ComposablePart экземпляр, который представляет импортированный объект, из которого я хочу избавиться?
- Или альтернативно: как мне получить список объектов ComposablePart, которые принадлежат к определенному .dll?
Я бы использовал следующее:
var parts = Container.Catalog.Parts
.Where(p => iDontNeed(p))
.Select(p => howDoIConvertComposablePartDefinition2ComposablePart(p));
var batch = new CompositionBatch();
parts.ToList().ForEach(part => batch.RemovePart(part));
Спасибо