Почему GetExportedValues ​​<T> () больше не работает после использования окончательной версии MEF .net 4? - PullRequest
2 голосов
/ 22 апреля 2010

В течение последних нескольких месяцев я разрабатывал приложение с управляемой инфраструктурой расширяемости, используя предварительный просмотр сообщества. Я использовал метод GetExportedValues ​​() и PartCreationPolicy (CreationPolicy.NonShared) для фальсификации фабрики классов (поскольку фабрика поддерживается только в версии Silverlight). Это работало отлично, пока я не обновил проект для использования .net 4.0. Там нет ошибки, это просто не работает.

Так почему этот код перестал работать? Код следует:

Заводской метод:

public static IEnumerable<DataActionBase> GetActionsFromDirectory(string PluginsFolder)
{
    IEnumerable<DataActionBase> result = null;

    var catalog = new DirectoryCatalog(PluginsFolder);
    var container = new CompositionContainer(catalog: catalog);

    result = container.GetExportedValues<DataActionBase>();

    return result;
}

Пример класса экспорта:

[Export(typeof(DataActionBase))]
[PartCreationPolicy(CreationPolicy.NonShared)]
public class AnAction : DataActionBase
{
    ....
}

1 Ответ

3 голосов
/ 22 апреля 2010

Вы перекомпилировали свои расширения для .NET 4.0? Если расширения ссылаются на версию MEF для предварительного просмотра codeplex, то .NET 4.0 MEF их не подхватит. Это связано с тем, что атрибут экспорта будет происходить из сборки с другим строгим именем, о котором .NET 4.0 MEF ничего не знает.

...