Freigeben über


CompositionContainer Klasse

Definition

Verwaltet die Komposition von Teilen.

public ref class CompositionContainer : System::ComponentModel::Composition::Hosting::ExportProvider, IDisposable, System::ComponentModel::Composition::ICompositionService
public class CompositionContainer : System.ComponentModel.Composition.Hosting.ExportProvider, IDisposable, System.ComponentModel.Composition.ICompositionService
type CompositionContainer = class
    inherit ExportProvider
    interface ICompositionService
    interface IDisposable
Public Class CompositionContainer
Inherits ExportProvider
Implements ICompositionService, IDisposable
Vererbung
CompositionContainer
Implementiert

Beispiele

Im folgenden Beispiel wird ein CompositionContainer Objekt mit einem Katalog initialisiert und zum Ausfüllen der Importe eines Teils verwendet. In diesem Beispiel wird das Attributierte Programmiermodell verwendet.

[Export]
class MyAddin
{
    public String myData { get { return "The data!"; } }
}

class MyProgram
{
    [Import]
    public MyAddin myAddin { get; set; }
}

class Program
{
    static void Main(string[] args)
    {
        AggregateCatalog catalog = new AggregateCatalog();
        catalog.Catalogs.Add(new AssemblyCatalog(typeof(MyAddin).Assembly));
        CompositionContainer _container = new CompositionContainer(catalog);
        MyProgram myProgram = new MyProgram();
        _container.SatisfyImportsOnce(myProgram);
        Console.WriteLine(myProgram.myAddin.myData);
        Console.ReadLine();

        _container.Dispose();
    }
}
<Export()>
Public Class MyAddin
    Public ReadOnly Property theData As String
        Get
            Return "The Data!"
        End Get
    End Property
End Class

Public Class MyProgam
    Private _MyAddin As MyAddin

    <Import()>
    Public Property MyAddinProperty As MyAddin
        Get
            Return _MyAddin
        End Get
        Set(ByVal value As MyAddin)
            _MyAddin = value
        End Set
    End Property

End Class



Sub Main()
    Dim catalog As AggregateCatalog = New AggregateCatalog()
    catalog.Catalogs.Add(New AssemblyCatalog(GetType(MyAddin).Assembly))
    Dim container As CompositionContainer = New CompositionContainer(catalog)
    Dim theProgam As MyProgam = New MyProgam()
    container.SatisfyImportsOnce(theProgam)
    Console.WriteLine(theProgam.MyAddinProperty.theData)
    Console.ReadLine()

    container.Dispose()

End Sub

Hinweise

Ein CompositionContainer -Objekt dient zwei Hauptzwecke in einer Anwendung. Zunächst wird nachverfolgt, welche Teile für die Komposition verfügbar sind und welche Abhängigkeiten sie haben, und führt die Komposition aus, wenn sich der Satz der verfügbaren Teile ändert. Zweitens stellt es die Methoden bereit, mit denen die Anwendung Instanzen von zusammengesetzten Teilen abruft oder die Abhängigkeiten eines zusammengesetzten Teils füllt.

Wichtig

Dieser Typ implementiert die IDisposable-Schnittstelle. Nach Abschluss der Verwendung sollten Sie den Typ entweder direkt oder indirekt löschen. Zum direkten Löschen des Typs rufen Sie seine Dispose-Methode in einem try/catch-Block auf. Zum indirekten Löschen verwenden Sie ein Sprachkonstrukt wie using (in C#) oder Using (in Visual Basic). Weitere Informationen finden Sie im Abschnitt „Verwenden eines Objekts, das IDisposable implementiert“ des Themas „Die IDisposable-Schnittstelle“.

Teile können dem Container entweder direkt oder über die Catalog -Eigenschaft zur Verfügung gestellt werden. Alle darin ComposablePartCatalog erkennbaren Teile stehen dem Container zur Verfügung, um Importe zu erfüllen, zusammen mit allen direkt hinzugefügten Teilen.

Die Compose -Methode ermöglicht das Hinzufügen instanziierter Teile zu einem vorhandenen Container. Wenn die Komposition erfolgreich ist, werden ihre Importe mit Aus dem Container abgerufenen Teilen gefüllt, und ihre Exporte sind für andere Teile verfügbar. Importe, die als neu komposierbar gekennzeichnet sind, werden für die Neukomposition registriert.

Die SatisfyImportsOnce -Methode ermöglicht es einem Teil, seine Importe zu füllen, ohne dem Container hinzugefügt zu werden. Wenn die Komposition erfolgreich ist, werden die Importe des Teils ausgefüllt, aber die Exporte des Teils sind für andere Teile nicht verfügbar, und es werden keine Importe für die Neukomposition registriert.

CompositionContainer -Objekte sollten immer verworfen werden. Wenn die Dispose -Methode aufgerufen wird, entsorgt das CompositionContainer Objekt auch alle teile, die es erstellt hat.

Ein CompositionContainer Objekt, auf das über mehrere Threads zugegriffen werden kann, muss mit dem isThreadSafe Parameter auf festgelegt truewerden, indem der CompositionContainer(ComposablePartCatalog, Boolean, ExportProvider[]) Konstruktor verwendet wird. Die Leistung ist etwas langsamer, wenn isThreadSafe dies der Fall ist true. Daher wird empfohlen, diesen Parameter in Singlethread-Szenarien auf false festzulegen. Der Standardwert ist false.

Warnung

Ein CompositionContainer sollte niemals sich selbst oder einen Teil importieren, der einen Verweis darauf hat. Ein solcher Verweis könnte es einem nicht vertrauenswürdigen Teil ermöglichen, Zugriff auf alle Teile im Container zu erhalten.

Konstruktoren

CompositionContainer()

Initialisiert eine neue Instanz der CompositionContainer-Klasse.

CompositionContainer(ComposablePartCatalog, Boolean, ExportProvider[])

Initialisiert eine neue Instanz der CompositionContainer-Klasse mit dem angegebenen Katalog, im threadsicheren Modus und mit den angegebenen Exportanbietern.

CompositionContainer(ComposablePartCatalog, CompositionOptions, ExportProvider[])

Initialisiert eine neue Instanz der CompositionContainer-Klasse mit dem angegebenen Katalog, Optionen und Exportanbietern.

CompositionContainer(ComposablePartCatalog, ExportProvider[])

Initialisiert eine neue Instanz der CompositionContainer-Klasse mit dem angegebenen Katalog und den angegebenen Exportanbietern.

CompositionContainer(CompositionOptions, ExportProvider[])

Initialisiert eine neue Instanz der CompositionContainer-Klasse mit dem angegebenen Katalog und den angegebenen Exportanbietern und Optionen.

CompositionContainer(ExportProvider[])

Initialisiert eine neue Instanz der CompositionContainer-Klasse mit den angegebenen Exportanbietern.

Eigenschaften

Catalog

Ruft das ComposablePartCatalog-Objekt ab, das den Containerzugriff auf Export-Objekte bereitstellt.

Providers

Ruft die Exportanbieter ab, die den Containerzugriff auf zusätzliche ComposablePartCatalog-Objekte bereitstellen.

Methoden

Compose(CompositionBatch)

Fügt die Teile im angegebenen CompositionBatch dem Container hinzu bzw. entfernt sie aus dem Container und führt die Komposition aus.

Dispose()

Gibt alle von der aktuellen Instanz der CompositionContainer-Klasse verwendeten Ressourcen frei.

Dispose(Boolean)

Gibt die von CompositionContainer verwendeten nicht verwalteten Ressourcen und optional die verwalteten Ressourcen frei.

Equals(Object)

Bestimmt, ob das angegebene Objekt gleich dem aktuellen Objekt ist.

(Geerbt von Object)
GetExport<T,TMetadataView>()

Gibt den Export mit dem vom angegebenen Typparameter abgeleiteten Vertragsnamen zurück. Wenn nicht genau ein übereinstimmender Export vorhanden ist, wird eine Ausnahme ausgelöst.

(Geerbt von ExportProvider)
GetExport<T,TMetadataView>(String)

Gibt den Export mit dem angegebenen Vertragsnamen zurück. Wenn nicht genau ein übereinstimmender Export vorhanden ist, wird eine Ausnahme ausgelöst.

(Geerbt von ExportProvider)
GetExport<T>()

Gibt den Export mit dem vom angegebenen Typparameter abgeleiteten Vertragsnamen zurück. Wenn nicht genau ein übereinstimmender Export vorhanden ist, wird eine Ausnahme ausgelöst.

(Geerbt von ExportProvider)
GetExport<T>(String)

Gibt den Export mit dem angegebenen Vertragsnamen zurück. Wenn nicht genau ein übereinstimmender Export vorhanden ist, wird eine Ausnahme ausgelöst.

(Geerbt von ExportProvider)
GetExportedValue<T>()

Gibt das exportierte Objekt mit dem vom angegebenen Typparameter abgeleiteten Vertragsnamen zurück. Wenn nicht genau ein übereinstimmendes exportiertes Objekt vorhanden ist, wird eine Ausnahme ausgelöst.

(Geerbt von ExportProvider)
GetExportedValue<T>(String)

Gibt das exportierte Objekt mit dem angegebenen Vertragsnamen zurück. Wenn nicht genau ein übereinstimmendes exportiertes Objekt vorhanden ist, wird eine Ausnahme ausgelöst.

(Geerbt von ExportProvider)
GetExportedValueOrDefault<T>()

Ruft das exportierte Objekt mit dem vom angegebenen Typparameter abgeleiteten Vertragsnamen oder den Standardwert für den angegebenen Typ ab, oder löst eine Ausnahme aus, falls mehrere übereinstimmende exportierte Objekte vorhanden sind.

(Geerbt von ExportProvider)
GetExportedValueOrDefault<T>(String)

Ruft das exportierte Objekt mit dem angegebenen Vertragsnamen oder den Standardwert für den angegebenen Typ ab, oder löst eine Ausnahme aus, falls mehrere übereinstimmende exportierte Objekte vorhanden sind.

(Geerbt von ExportProvider)
GetExportedValues<T>()

Ruft alle exportierten Objekte mit dem vom angegebenen Typparameter abgeleiteten Vertragsnamen ab.

(Geerbt von ExportProvider)
GetExportedValues<T>(String)

Ruft alle exportierten Objekte mit dem angegebenen Vertragsnamen ab.

(Geerbt von ExportProvider)
GetExports(ImportDefinition)

Ruft alle Exporte ab, die mit den Bedingungen der angegebenen Importdefinition übereinstimmen.

(Geerbt von ExportProvider)
GetExports(ImportDefinition, AtomicComposition)

Ruft alle Exporte ab, die den Bedingungen der angegebenen Importdefinition und Komposition entsprechen.

(Geerbt von ExportProvider)
GetExports(Type, Type, String)

Ruft alle Exporte mit dem angegebenen Vertragsnamen ab.

(Geerbt von ExportProvider)
GetExports<T,TMetadataView>()

Ruft alle Exporte mit dem vom angegebenen Typparameter abgeleiteten Vertragsnamen ab.

(Geerbt von ExportProvider)
GetExports<T,TMetadataView>(String)

Ruft alle Exporte mit dem angegebenen Vertragsnamen ab.

(Geerbt von ExportProvider)
GetExports<T>()

Ruft alle Exporte mit dem vom angegebenen Typparameter abgeleiteten Vertragsnamen ab.

(Geerbt von ExportProvider)
GetExports<T>(String)

Ruft alle Exporte mit dem angegebenen Vertragsnamen ab.

(Geerbt von ExportProvider)
GetExportsCore(ImportDefinition, AtomicComposition)

Gibt eine Auflistung aller Exporte zurück, die mit den Bedingungen im angegebenen ImportDefinition-Objekt zu übereinstimmen.

GetHashCode()

Fungiert als Standardhashfunktion.

(Geerbt von Object)
GetType()

Ruft den Type der aktuellen Instanz ab.

(Geerbt von Object)
MemberwiseClone()

Erstellt eine flache Kopie des aktuellen Object.

(Geerbt von Object)
OnExportsChanged(ExportsChangeEventArgs)

Löst das ExportsChanged-Ereignis aus.

(Geerbt von ExportProvider)
OnExportsChanging(ExportsChangeEventArgs)

Löst das ExportsChanging-Ereignis aus.

(Geerbt von ExportProvider)
ReleaseExport(Export)

Gibt das angegebene Export-Objekt aus dem CompositionContainer frei.

ReleaseExport<T>(Lazy<T>)

Entfernt den angegebenen Export aus der Komposition und gibt sofern möglich seine Ressourcen frei.

ReleaseExports(IEnumerable<Export>)

Gibt einen Satz von Export-Objekten aus dem CompositionContainer frei.

ReleaseExports<T,TMetadataView>(IEnumerable<Lazy<T,TMetadataView>>)

Entfernt eine Auflistung der Exporte aus der Komposition und gibt sofern möglich ihre Ressourcen frei.

ReleaseExports<T>(IEnumerable<Lazy<T>>)

Entfernt eine Auflistung der Exporte aus der Komposition und gibt sofern möglich ihre Ressourcen frei.

SatisfyImportsOnce(ComposablePart)

Führt die Importe des angegebenen ComposablePart-Objekts aus, ohne es zur Neuerstellung zu registrieren.

ToString()

Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt.

(Geerbt von Object)
TryGetExports(ImportDefinition, AtomicComposition, IEnumerable<Export>)

Ruft alle Exporte ab, die den Bedingungen für den angegebenen Import entsprechen.

(Geerbt von ExportProvider)

Ereignisse

ExportsChanged

Tritt auf, wenn sich die Exporte in ExportProvider ändern.

(Geerbt von ExportProvider)
ExportsChanging

Tritt auf, wenn sich die bereitgestellten Exporte ändern.

(Geerbt von ExportProvider)

Erweiterungsmethoden

ComposeExportedValue<T>(CompositionContainer, T)

Erstellt ein Part aus dem angegebenen Wert und verfasst es im angegebenen Kompositionscontainer.

ComposeExportedValue<T>(CompositionContainer, String, T)

Erstellt ein Part aus dem angegebenen Objekt unter dem angegebenen Vertragsnamen und verfasst es im angegebenen Kompositionscontainer.

ComposeParts(CompositionContainer, Object[])

Erstellt zusammensetzbare Parts aus einem Array attributierter Objekte und verfasst sie im angegebenen Kompositionscontainer.

SatisfyImportsOnce(ICompositionService, Object)

Verfasst das angegebene Part mit dem angegebenen Kompositionsdienst bei deaktivierter Neuerstellung.

SatisfyImportsOnce(ICompositionService, Object, ReflectionContext)

Verfasst den angegebenen Teil mit dem angegebenen Kompositionsdiensts wenn die Neuerstellung deaktiviert ist und unter Verwendung des angegebenen Reflektionskontexts.

Gilt für:

Weitere Informationen