MEF GetExports ничего не возвращает с AllowMultiple = True

Я не очень хорошо понимаю MEF, так что, надеюсь, это простое исправление того, как я думаю, что это работает.

Я пытаюсь использовать MEF для получения некоторой информации о классе и о том, как его следует использовать. Я использую параметры метаданных, чтобы попытаться добиться этого. Мои интерфейсы и атрибут выглядят так:

public interface IMyInterface
{
}

public interface IMyInterfaceInfo
{
    Type SomeProperty1 { get; }
    double SomeProperty2 { get; }
    string SomeProperty3 { get; }
}

[MetadataAttribute]
[AttributeUsage(AttributeTargets.Class, AllowMultiple = true)]
public class ExportMyInterfaceAttribute : ExportAttribute, IMyInterfaceInfo
{
    public ExportMyInterfaceAttribute(Type someProperty1, double someProperty2, string someProperty3)
        : base(typeof(IMyInterface))
    {
        SomeProperty1 = someProperty1;
        SomeProperty2 = someProperty2;
        SomeProperty3 = someProperty3;
    }

    public Type SomeProperty1 { get; set; }
    public double SomeProperty2 { get; set; }
    public string SomeProperty3 { get; set; }
}

Класс, украшенный атрибутом, выглядит так:

[ExportMyInterface(typeof(string), 0.1, "whoo data!")]
[ExportMyInterface(typeof(int), 0.4, "asdfasdf!!")]
public class DecoratedClass : IMyInterface
{
}

Метод, который пытается использовать импорт, выглядит так:

private void SomeFunction()
{
    // CompositionContainer is an instance of CompositionContainer
    var myExports = CompositionContainer.GetExports<IMyInterface, IMyInterfaceInfo>();
}

В моем случае myExportsвсегда пуст.В моем CompositionContainer у меня есть Part в моем каталоге, который имеет два ExportDefinition, оба со следующим ContractName: «MyNamespace.IMyInterface». Метаданные также правильно загружаются в соответствии с моим экспортом.

Если я удалю установщик AllowMultipleи включу только один экспортируемый атрибут, переменная myExportsтеперь будет иметь единственный экспорт с загруженными метаданными.

Что я делаю не так?

РЕДАКТИРОВАТЬ: Если я использую слабо типизированные метаданные, мой экспорт внезапно удовлетворяется:

var myExports = CompositionContainer.GetExports<IMyInterface, IDictionary<string, object>>();

Любые идеи, почему?

6
задан sohum 11 June 2012 в 22:46
поделиться