Справка, начинающая с MEF

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

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

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

Спасибо S

13
задан SteveCl 24 May 2010 в 17:29
поделиться

4 ответа

Вот два сообщения MEF «Приступая к работе» Брэда Абрамса:

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

6
ответ дан 2 December 2019 в 00:45
поделиться

Попробуйте прочитать введение Глена Блока в MEF в MSDN Magazine:

Managed Extensibility Framework: Building Composable Apps in .NET 4 with the Managed Extensibility Framework

3
ответ дан 2 December 2019 в 00:45
поделиться

Вот созданное демонстрационное приложение с WPF, MVVM и MEF (как для композиции, так и для расширяемости).

1
ответ дан 2 December 2019 в 00:45
поделиться

Вы можете поддержать 'Recomposition', пометив импорт следующим образом:

[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);
2
ответ дан 2 December 2019 в 00:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: