Udostępnij za pośrednictwem


CompositionContainer Klasa

Definicja

Zarządza kompozycją części.

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
Dziedziczenie
CompositionContainer
Implementuje

Przykłady

W poniższym przykładzie CompositionContainer obiekt jest inicjowany z wykazem i służy do wypełniania importów części. W tym przykładzie użyto modelu programowania przypisanego.

[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

Uwagi

CompositionContainer Obiekt służy dwóm głównym celom w aplikacji. Po pierwsze, śledzi, które części są dostępne do składu i jakie są ich zależności, i wykonuje kompozycję za każdym razem, gdy zestaw dostępnych części się zmienia. Po drugie, udostępnia metody, za pomocą których aplikacja pobiera wystąpienia złożonych części lub wypełnia zależności części możliwej do skomponowania.

Ważne

Ten typ implementuje IDisposable interfejs. Po zakończeniu korzystania z typu należy usunąć go bezpośrednio lub pośrednio. Aby bezpośrednio usunąć typ, wywołaj jego Dispose metodę try/catch w bloku. Aby usunąć go pośrednio, użyj konstrukcji języka, takiej jak using (w języku C#) lub Using (w Visual Basic). Aby uzyskać więcej informacji, zobacz sekcję "Using an Object that Implements IDisposable" (Używanie obiektu implementujące interfejs IDisposable) w temacie interfejsu IDisposable .

Części mogą być udostępniane kontenerowi bezpośrednio lub za pośrednictwem Catalog właściwości . Wszystkie części, które można wykryć w tym ComposablePartCatalog miejscu, są dostępne dla kontenera do realizacji importu wraz z wszystkimi częściami dodanymi bezpośrednio.

Metoda Compose umożliwia dodawanie wystąpionych części do istniejącego kontenera. Zakładając, że kompozycja zakończy się pomyślnie, te części będą miały import wypełniony częściami pobranymi z kontenera, a ich eksport będzie dostępny dla innych części. Importy oznaczone jako ponowne kompozycje zostaną zarejestrowane do ponownego kompozycji.

Metoda SatisfyImportsOnce umożliwia części wypełnienie importów bez dodawania ich do kontenera. Jeśli kompozycja zakończy się pomyślnie, import części zostanie wypełniony, ale eksport części nie będzie dostępny dla innych części i żaden import nie zostanie zarejestrowany do rekompozycji.

CompositionContainer obiekty powinny być zawsze usuwane. Po wywołaniu DisposeCompositionContainer metody obiekt usuwa również wszystkie utworzone przez niego części.

Obiekt CompositionContainer , do którego można uzyskać dostęp z wielu wątków, musi być skonstruowany z parametrem ustawionym isThreadSafe na true, przy użyciu konstruktora CompositionContainer(ComposablePartCatalog, Boolean, ExportProvider[]) . Wydajność będzie nieco wolniejsza, gdy isThreadSafe parametr ma truewartość , dlatego zalecamy ustawienie tego parametru na false wartość w scenariuszach jednowątkowych. Wartość domyślna to false.

Ostrzeżenie

Element CompositionContainer nigdy nie powinien importować się ani części, która zawiera odwołanie do niego. Takie odwołanie może umożliwić niezaufanej części uzyskanie dostępu do wszystkich części w kontenerze.

Konstruktory

CompositionContainer()

Inicjuje nowe wystąpienie klasy CompositionContainer.

CompositionContainer(ComposablePartCatalog, Boolean, ExportProvider[])

Inicjuje CompositionContainer nowe wystąpienie klasy z określonym wykazem, trybem awaryjnym wątków i dostawcami eksportu.

CompositionContainer(ComposablePartCatalog, CompositionOptions, ExportProvider[])

Inicjuje CompositionContainer nowe wystąpienie klasy z określonym wykazem, opcjami i dostawcami eksportu.

CompositionContainer(ComposablePartCatalog, ExportProvider[])

Inicjuje CompositionContainer nowe wystąpienie klasy z określonym wykazem i dostawcami eksportu.

CompositionContainer(CompositionOptions, ExportProvider[])

Inicjuje CompositionContainer nowe wystąpienie klasy z określonymi dostawcami eksportu i opcjami.

CompositionContainer(ExportProvider[])

Inicjuje CompositionContainer nowe wystąpienie klasy z określonymi dostawcami eksportu.

Właściwości

Catalog

Pobiera obiekt ComposablePartCatalog , który zapewnia kontenerowi dostęp do Export obiektów.

Providers

Pobiera dostawców eksportu, którzy zapewniają dostęp kontenera do dodatkowych ComposablePartCatalog obiektów.

Metody

Compose(CompositionBatch)

Dodaje lub usuwa części określone CompositionBatch z kontenera i wykonuje kompozycję.

Dispose()

Zwalnia wszystkie zasoby używane przez bieżące wystąpienie klasy CompositionContainer.

Dispose(Boolean)

Zwalnia zasoby niezarządzane używane przez element CompositionContainer i opcjonalnie zwalnia zasoby zarządzane.

Equals(Object)

Określa, czy dany obiekt jest taki sam, jak bieżący obiekt.

(Odziedziczone po Object)
GetExport<T,TMetadataView>()

Zwraca eksport z nazwą kontraktu pochodzącą z określonego parametru typu. Jeśli nie ma dokładnie jednego zgodnego eksportu, zgłaszany jest wyjątek.

(Odziedziczone po ExportProvider)
GetExport<T,TMetadataView>(String)

Zwraca eksport o określonej nazwie kontraktu. Jeśli nie ma dokładnie jednego zgodnego eksportu, zgłaszany jest wyjątek.

(Odziedziczone po ExportProvider)
GetExport<T>()

Zwraca eksport z nazwą kontraktu pochodzącą z określonego parametru typu. Jeśli nie ma dokładnie jednego zgodnego eksportu, zgłaszany jest wyjątek.

(Odziedziczone po ExportProvider)
GetExport<T>(String)

Zwraca eksport o określonej nazwie kontraktu. Jeśli nie ma dokładnie jednego zgodnego eksportu, zgłaszany jest wyjątek.

(Odziedziczone po ExportProvider)
GetExportedValue<T>()

Zwraca wyeksportowany obiekt o nazwie kontraktu pochodzącej z określonego parametru typu. Jeśli nie ma dokładnie jednego zgodnego wyeksportowanego obiektu, zgłaszany jest wyjątek.

(Odziedziczone po ExportProvider)
GetExportedValue<T>(String)

Zwraca wyeksportowany obiekt o określonej nazwie kontraktu. Jeśli nie ma dokładnie jednego zgodnego wyeksportowanego obiektu, zgłaszany jest wyjątek.

(Odziedziczone po ExportProvider)
GetExportedValueOrDefault<T>()

Pobiera wyeksportowany obiekt z nazwą kontraktu pochodzącą z określonego parametru typu lub wartością domyślną dla określonego typu lub zgłasza wyjątek, jeśli istnieje więcej niż jeden zgodny wyeksportowany obiekt.

(Odziedziczone po ExportProvider)
GetExportedValueOrDefault<T>(String)

Pobiera wyeksportowany obiekt z określoną nazwą kontraktu lub wartością domyślną dla określonego typu lub zgłasza wyjątek, jeśli istnieje więcej niż jeden zgodny wyeksportowany obiekt.

(Odziedziczone po ExportProvider)
GetExportedValues<T>()

Pobiera wszystkie wyeksportowane obiekty z nazwą kontraktu pochodzącą z określonego parametru typu.

(Odziedziczone po ExportProvider)
GetExportedValues<T>(String)

Pobiera wszystkie wyeksportowane obiekty o określonej nazwie kontraktu.

(Odziedziczone po ExportProvider)
GetExports(ImportDefinition)

Pobiera wszystkie eksporty zgodne z warunkami określonej definicji importu.

(Odziedziczone po ExportProvider)
GetExports(ImportDefinition, AtomicComposition)

Pobiera wszystkie eksporty zgodne z warunkami określonej definicji i kompozycji importu.

(Odziedziczone po ExportProvider)
GetExports(Type, Type, String)

Pobiera wszystkie eksporty z określoną nazwą kontraktu.

(Odziedziczone po ExportProvider)
GetExports<T,TMetadataView>()

Pobiera wszystkie eksporty z nazwą kontraktu pochodzącą z określonego parametru typu.

(Odziedziczone po ExportProvider)
GetExports<T,TMetadataView>(String)

Pobiera wszystkie eksporty z określoną nazwą kontraktu.

(Odziedziczone po ExportProvider)
GetExports<T>()

Pobiera wszystkie eksporty z nazwą kontraktu pochodzącą z określonego parametru typu.

(Odziedziczone po ExportProvider)
GetExports<T>(String)

Pobiera wszystkie eksporty z określoną nazwą kontraktu.

(Odziedziczone po ExportProvider)
GetExportsCore(ImportDefinition, AtomicComposition)

Zwraca kolekcję wszystkich eksportów, które pasują do warunków w określonym ImportDefinition obiekcie.

GetHashCode()

Służy jako domyślna funkcja skrótu.

(Odziedziczone po Object)
GetType()

Type Pobiera wartość bieżącego wystąpienia.

(Odziedziczone po Object)
MemberwiseClone()

Tworzy płytkią kopię bieżącego Objectelementu .

(Odziedziczone po Object)
OnExportsChanged(ExportsChangeEventArgs)

ExportsChanged Zgłasza zdarzenie.

(Odziedziczone po ExportProvider)
OnExportsChanging(ExportsChangeEventArgs)

ExportsChanging Zgłasza zdarzenie.

(Odziedziczone po ExportProvider)
ReleaseExport(Export)

Zwalnia określony Export obiekt z obiektu CompositionContainer.

ReleaseExport<T>(Lazy<T>)

Usuwa określony eksport z kompozycji i zwalnia jego zasoby, jeśli to możliwe.

ReleaseExports(IEnumerable<Export>)

Zwalnia zestaw Export obiektów z obiektu CompositionContainer.

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

Usuwa kolekcję eksportów z kompozycji i zwalnia ich zasoby, jeśli to możliwe.

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

Usuwa kolekcję eksportów z kompozycji i zwalnia ich zasoby, jeśli to możliwe.

SatisfyImportsOnce(ComposablePart)

Spełnia import określonego ComposablePart obiektu bez rejestrowania go do rekompozycji.

ToString()

Zwraca ciąg reprezentujący bieżący obiekt.

(Odziedziczone po Object)
TryGetExports(ImportDefinition, AtomicComposition, IEnumerable<Export>)

Pobiera wszystkie eksporty zgodne z warunkami określonego importu.

(Odziedziczone po ExportProvider)

Zdarzenia

ExportsChanged

Występuje, gdy eksporty w ExportProvider ramach zmiany.

(Odziedziczone po ExportProvider)
ExportsChanging

Występuje, gdy podane eksporty zmieniają się.

(Odziedziczone po ExportProvider)

Metody rozszerzania

ComposeExportedValue<T>(CompositionContainer, T)

Tworzy część na podstawie określonej wartości i komponuje ją w określonym kontenerze kompozycji.

ComposeExportedValue<T>(CompositionContainer, String, T)

Tworzy część z określonego obiektu pod określoną nazwą kontraktu i komponuje go w określonym kontenerze kompozycji.

ComposeParts(CompositionContainer, Object[])

Tworzy części składowe na podstawie tablicy obiektów przypisanych i komponuje je w określonym kontenerze kompozycji.

SatisfyImportsOnce(ICompositionService, Object)

Komponuje określoną część przy użyciu określonej usługi kompozycji z wyłączoną rekompozycją.

SatisfyImportsOnce(ICompositionService, Object, ReflectionContext)

Komponuje określoną część przy użyciu określonej usługi kompozycji z wyłączoną rekompozycją i przy użyciu określonego kontekstu odbicia.

Dotyczy

Zobacz też