Как экспортировать тип в MEF, как если бы к этому типу был применен атрибут экспорта? - PullRequest
5 голосов
/ 18 ноября 2010

Я хотел бы динамически применять атрибут MEF Export к типу во время выполнения, точно так же, как если бы тип имел атрибут Export, примененный во время компиляции.

Есть ли простой способ сделать это?

Кроме этого, есть ли сложный способ сделать это?

Ответы [ 2 ]

7 голосов
/ 18 ноября 2010

Если вы можете позволить себе использовать .NET 4.5 (что означает отказ от поддержки Windows XP), теперь вы можете использовать MEF регистрация без атрибутов aka Convention Model .

В .NET4 или более ранних выпусках предварительного просмотра MEF это не поддерживается "из коробки", но MEF все еще можно расширить, создав собственные реализации ExportProvider или ComposablePartCatalog .

Поставщик MEF Contrib Fluent Definition - это такая реализация, которая позволяет регистрировать импорт и экспорт с помощью вызовов методов.

Настраиваемое определение MEF Contrib Обеспечить rэто еще один способ, позволяющий настроить импорт и экспорт в файле XML.

Еще один вариант - выполнить регистрацию с помощью Autofac , а затем использовать MEF-интеграцию * 1024.* сделать компоненты автозапуска доступными для MEF.

1 голос
/ 18 ноября 2010

Я не уверен на 100%, но я не думаю, что это возможно сделать с MEF.Тем не менее, один шаблон, который нужно использовать для обеспечения аналогичного поведения, - это шаблон фабрики / поставщика.

interface IData {} 

interface IDataProvider {
  IData Data { get; set; }
}

[Export(IDataProvider)]
class DataProvider : IDataProvider {
  public IData { get; set; }
}

Вы можете использовать этот шаблон для динамического обновления реализации IData до значения, которое вы хотели бы использовать.

...