2010-05-24 3 views
13

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

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

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

Thx S

+1

Что делает MEF и какие каркасы DI не совсем то же самое (хотя есть перекрытие, но ваш вопрос может быть неправильно помечен). Есть хорошая статья о том, как сделать их хорошими здесь http://blogs.msdn.com/nblumhardt/archive/2009/03/16/hosting-mef-extensions-in-an-ioc-container.aspx – R0MANARMY

ответ

6

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

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

+2

Отлично. ..благодаря. Для кого-то еще, они могут найти эту ссылку более полезной ... ее немного более актуальной. http://goo.gl/4jpD – SteveCl

2

Вы можете поддержать 'переустройство', пометив импорт, как:

[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); 
1

Вот demo application построен с WPF, MVVM и MEF (как для состава, так и для расширяемости).

1

This article обеспечивает простой общий подход к работе с MEF:

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