Начало работы с MEF

Я где-то читал, что с помощью MEF я могу просто удалить dll в каталог, и мое приложение (с некоторой магией MEF) сможет прочитать его и выполнить код в нем? Надеюсь, только классы, которые реализуют интерфейс, который я определяю

Может кто-нибудь помочь мне разобраться с некоторыми ссылками, возможно, для моей проблемы.

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

спасибо S

Ответы

Ответ 1

Вот два сообщения MEF "Начало работы" от Брэда Абрамса:

Обратите внимание, что они были написаны с использованием предварительных версий MEF, поэтому произошли некоторые изменения. Например, AttributedAssemblyCatalog был переименован в AssemblyCatalog, AggregatingComposablePartCatalog теперь представляет собой AggregatingCatalog, а PackageCatalog на Silverlight теперь является DeploymentCatalog и имеет некоторые другие изменения API.

Ответ 3

Вы можете поддерживать "Рекомпозицию", отмечая импорт следующим образом:

[ImportMany(AllowRecomposition=true)]
public IMessageSender[] Senders { get; set; }

Однако из того, что я могу сказать, это не автоматически загружает сборки. Версия MEF, которая сделала это для .NET 4 (и я предполагаю, что Preview 9 в комплексе), кажется, не загружает сборки автоматически. Я не уверен, изменилось ли это поведение по мере того, как был разработан MEF.

Вам нужно будет добавить FileSystemWatcher и вызвать Refresh(), например, DirectoryCatalog и прослушать одно или несколько следующих событий:

catalog.Changed += new EventHandler<ComposablePartCatalogChangeEventArgs>(Catalog_Changed);
container.ExportsChanged += new EventHandler<ExportsChangeEventArgs>(Container_ExportsChanged);
directoryCat.Changed += new EventHandler<ComposablePartCatalogChangeEventArgs>(dCat_Changed);

Ответ 5

Эта статья обеспечивает простой общий подход к работе с MEF:

  • Самый простой способ (в общем случае) использовать MEF.
  • Как использовать MEF полностью ленив также для процесса загрузки Dll.