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?