MEF GetExports <T, TMetaDataView> gibt mit AllowMultiple = True nichts zurück

Ich verstehe MEF nicht sehr gut, also ist dies hoffentlich eine einfache Lösung, wie ich denke, dass es funktioniert.

Ich versuche, MEF zu verwenden, um Informationen über eine Klasse zu erhalten und wie sie verwendet werden sollte. Ich verwende die Metadaten-Optionen, um dies zu erreichen. Meine Schnittstellen und Attribute sehen folgendermaßen aus:

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; }
}

Die Klasse, die mit dem Attribut versehen ist, sieht folgendermaßen aus:

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

Die Methode, die versucht, den Import zu verwenden, sieht folgendermaßen aus:

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

In meinem FallmyExports ist immer leer. In meinem CompositionContainer habe ich ein Teil in meinem Katalog, das zwei enthältExportDefinitions, beide mit den folgendenContractName: "MyNamespace.IMyInterface". DasMetadata wird auch korrekt nach meinen exporten geladen.

Wenn ich das entferneAllowMultiple Setter und enthalten nur ein exportiertes Attribut, dasmyExports Variable hat jetzt den einzelnen Export mit seinen geladenen Metadaten.

Was mache ich falsch?

BEARBEITEN: Wenn ich schwach typisierte Metadaten verwende, ist mein Export plötzlich zufrieden:

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

Irgendwelche Ideen warum?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage