Frage

Ich spiele um mit dem neuen System.ComponentModel.Composition Namespace in .NET 4.0 beta 2, die auch als Managed Extensibility bekannt Rahmen .

Ich verwende das folgende C # Beispiel, bei dem ein Monkey Einfuhren eines Banana:

public interface IBanana 
{ 
}

[Export(typeof(IBanana))]
public class Banana : IBanana 
{ 
} 

public class Monkey
{
    [Import(typeof(IBanana))]
    public IBanana Banana { get; set; }
}

Allerdings, wenn ich versuchen, den Affen zu komponieren wie folgt dann ich eine InvalidOperationException erhalten mit der Meldung „ Diese Aufgabe wurde nicht initialisiert - die Eigenschaft‚SourceProvider‘muss gesetzt werden, .“

var exportProvider = new CatalogExportProvider(new TypeCatalog(typeof(Banana)));
var container = new CompositionContainer(exportProvider);
var monkey = new Monkey();
container.ComposeParts(monkey);

Was bin ich hier? Ich bin mir bewusst, dass ich den Katalog passieren kann direkt, ohne es in einem CatelogExportProvider Einwickeln, soll aber nicht die oben auch Arbeit?

War es hilfreich?

Lösung

Die CatalogExportProvider muss der Behälter einen Verweis zurück. Der folgende Code sollte funktionieren:

var exportProvider = new CatalogExportProvider(new TypeCatalog(typeof(Banana)));
var container = new CompositionContainer(exportProvider);
exportProvider.SourceProvider = container;
var monkey = new Monkey();
container.ComposeParts(monkey);

Der Behälter tut dies automatisch, wenn Sie einen Katalog in den Konstruktor übergeben. Ich glaube nicht, dass es oft viel von einem Grund, den CatalogExportProvider manuell zu erstellen.

Der Grund für die CatalogExportProvider einen Verweis auf den Behälter muss, ist, dass es Teile im Katalog sein kann mit Importen, dass Bedarf nach anderen Exportanbietern zufrieden sein, dass der Behälter angeschlossen ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top