Wie benutzt man ExportFactory <T>?

Ich bin neu bei MEF und experimentiere mit ExportFactory. Kann ich mit ExportFactory eine Liste erstellen, die auf dem Einfügen von Objekten durch den Benutzer basiert? Ein Beispiel ähnelt dem, was unten gezeigt wird. Ich verstehe die Verwendung von ExportFactory wahrscheinlich nicht, da während der Laufzeit ein Fehler angezeigt wird, der unten beim Erstellen angezeigt wird.

1) Es wurden keine gültigen Exporte gefunden, die der Einschränkung '((exportDefinition.ContractName == "System.ComponentModel.Composition.ExportFactory (CommonLibrary.IFoo)") entsprechen. AndAlso (exportDefinition.Metadata.ContainsKey ("ExportTypeIdentity") AndAlso "System. ComponentModel.Composition.ExportFactory (CommonLibrary.IFoo) ". Equals (exportDefinition.Metadata.get_Item (" ExportTypeIdentity ")))", ungültige Exporte wurden möglicherweise zurückgewiesen.

 class Program
{
    static void Main(string[] args)
    {
        Test mytest = new Test();
    }
}

public class Test : IPartImportsSatisfiedNotification
{
    [Import]
    private ExportFactory<IFoo> FooFactory { get; set; }

    public Test()
    {
        CompositionInitializer.SatisfyImports(this);
        CreateComponent("Amp");
        CreateComponent("Passive");
    }

    public void OnImportsSatisfied()
    {
        int i = 0;
    }

    public void CreateComponent(string name)
    {
        var componentExport = FooFactory.CreateExport();
        var comp = componentExport.Value;
    }
}

public interface IFoo
{
    double Name { get; set; }
}

[ExportMetadata("CompType", "Foo1")]
[Export(typeof(IFoo))]
[PartCreationPolicy(System.ComponentModel.Composition.CreationPolicy.NonShared)]
public class Foo1 : IFoo
{
    public double Name { get; set; }
    public Foo1()
    {

    }
}

[ExportMetadata("CompType", "Foo2")]
[Export(typeof(IFoo))]
[PartCreationPolicy(System.ComponentModel.Composition.CreationPolicy.NonShared)]
public class Foo2 : IFoo
{
    public double Name { get; set; }
    public Foo2()
    {
    }
}

Antworten auf die Frage(1)

Ihre Antwort auf die Frage