Sdílet prostřednictvím


CompositionContainer Třída

Definice

Spravuje složení částí.

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
Dědičnost
CompositionContainer
Implementuje

Příklady

V následujícím příkladu CompositionContainer je objekt inicializován katalogem a slouží k vyplnění importů části. V tomto příkladu se používá model programování s atributy.

[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

Poznámky

Objekt CompositionContainer slouží dvěma hlavním účelům v aplikaci. Nejprve sleduje, které části jsou k dispozici pro složení a jaké jsou jejich závislosti, a provádí složení pokaždé, když se změní sada dostupných částí. Zadruhé poskytuje metody, kterými aplikace získá instance složených částí nebo vyplní závislosti kompozovatelné části.

Důležité

Tento typ implementuje rozhraní IDisposable. Jakmile skončíte s používáním typu, měli byste ho odstranit buď přímo, nebo nepřímo. Chcete-li typ odstranit přímo, zavolejte jeho Dispose metodu v bloku try/catch. Pokud ho chcete zlikvidovat nepřímo, použijte konstruktor jazyka, jako je using (v jazyce C#) nebo Using (v jazyce Visual Basic). Další informace naleznete v části Použití objektu, který implementuje IDisposable v IDisposable tématu rozhraní.

Části lze zpřístupnit kontejneru buď přímo, nebo prostřednictvím Catalog vlastnosti. Všechny zjistitelné části jsou ComposablePartCatalog k dispozici kontejneru pro plnění importů spolu se všemi přidanými částmi přímo.

Metoda Compose umožňuje přidání instancí částí do existujícího kontejneru. Za předpokladu, že složení proběhne úspěšně, budou mít tyto části jejich importy naplněné částmi načtenými z kontejneru a jejich exporty budou k dispozici pro jiné části. Importy označené jako rekomposovatelné budou registrovány pro překompisování.

Metoda SatisfyImportsOnce umožňuje, aby část měla vyplněné importy, aniž by bylo přidáno do kontejneru. Pokud je složení úspěšné, importy části budou vyplněny, ale exporty části nebudou k dispozici pro jiné části a nebudou registrovány žádné importy pro rekompozici.

CompositionContainer objekty by měly být vždy odstraněny. Dispose Při zavolání metody objekt CompositionContainer také odstraní všechny části, které vytvořila.

Objekt CompositionContainer , ke kterému lze získat přístup z více vláken, musí být vytvořen s parametrem isThreadSafe nastaveným na true, pomocí konstruktoru CompositionContainer(ComposablePartCatalog, Boolean, ExportProvider[]) . Výkon bude poněkud pomalejší, isThreadSafetruetakže doporučujeme nastavit tento parametr ve false scénářích s jedním vláknem. Výchozí hodnota je false.

Výstraha

A CompositionContainer by se nikdy neměl importovat sám nebo část, která na ni odkazuje. Takový odkaz by mohl umožnit nedůvěryhodné části získat přístup ke všem částem v kontejneru.

Konstruktory

Name Description
CompositionContainer()

Inicializuje novou instanci CompositionContainer třídy.

CompositionContainer(ComposablePartCatalog, Boolean, ExportProvider[])

Inicializuje novou instanci CompositionContainer třídy se zadaným katalogem, režimem bezpečným pro vlákno a zprostředkovateli exportu.

CompositionContainer(ComposablePartCatalog, CompositionOptions, ExportProvider[])

Inicializuje novou instanci CompositionContainer třídy se zadaným katalogem, možnostmi a zprostředkovateli exportu.

CompositionContainer(ComposablePartCatalog, ExportProvider[])

Inicializuje novou instanci CompositionContainer třídy se zadaným katalogem a zprostředkovateli exportu.

CompositionContainer(CompositionOptions, ExportProvider[])

Inicializuje novou instanci CompositionContainer třídy se zadanými zprostředkovateli a možnostmi exportu.

CompositionContainer(ExportProvider[])

Inicializuje novou instanci CompositionContainer třídy se zadanými zprostředkovateli exportu.

Vlastnosti

Name Description
Catalog

ComposablePartCatalog Získá, který poskytuje kontejner přístup k Export objektům.

Providers

Získá zprostředkovatele exportu, které poskytují přístup ke kontejneru k dalším ComposablePartCatalog objektům.

Metody

Name Description
Compose(CompositionBatch)

Přidá nebo odebere části v zadaném CompositionBatch kontejneru a provede složení.

Dispose()

Uvolní všechny prostředky používané aktuální instancí CompositionContainer třídy.

Dispose(Boolean)

Uvolní nespravované prostředky používané CompositionContainer a volitelně uvolní spravované prostředky.

Equals(Object)

Určuje, zda je zadaný objekt roven aktuálnímu objektu.

(Zděděno od Object)
GetExport<T,TMetadataView>()

Vrátí export s názvem kontraktu odvozeným ze zadaného parametru typu. Pokud neexistuje přesně jeden odpovídající export, vyvolá se výjimka.

(Zděděno od ExportProvider)
GetExport<T,TMetadataView>(String)

Vrátí export se zadaným názvem kontraktu. Pokud neexistuje přesně jeden odpovídající export, vyvolá se výjimka.

(Zděděno od ExportProvider)
GetExport<T>()

Vrátí export s názvem kontraktu odvozeným ze zadaného parametru typu. Pokud neexistuje přesně jeden odpovídající export, vyvolá se výjimka.

(Zděděno od ExportProvider)
GetExport<T>(String)

Vrátí export se zadaným názvem kontraktu. Pokud neexistuje přesně jeden odpovídající export, vyvolá se výjimka.

(Zděděno od ExportProvider)
GetExportedValue<T>()

Vrátí exportovaný objekt s názvem kontraktu odvozeným ze zadaného parametru typu. Pokud neexistuje přesně jeden odpovídající exportovaný objekt, vyvolá se výjimka.

(Zděděno od ExportProvider)
GetExportedValue<T>(String)

Vrátí exportovaný objekt se zadaným názvem kontraktu. Pokud neexistuje přesně jeden odpovídající exportovaný objekt, vyvolá se výjimka.

(Zděděno od ExportProvider)
GetExportedValueOrDefault<T>()

Získá exportovaný objekt s názvem kontrakt odvozený ze zadaného parametru typu nebo výchozí hodnota pro zadaný typ, nebo vyvolá výjimku, pokud existuje více než jeden odpovídající exportovaný objekt.

(Zděděno od ExportProvider)
GetExportedValueOrDefault<T>(String)

Získá exportovaný objekt se zadaným názvem kontraktu nebo výchozí hodnotou pro zadaný typ, nebo vyvolá výjimku, pokud existuje více než jeden odpovídající exportovaný objekt.

(Zděděno od ExportProvider)
GetExportedValues<T>()

Získá všechny exportované objekty s názvem kontrakt odvozený ze zadaného parametru typu.

(Zděděno od ExportProvider)
GetExportedValues<T>(String)

Získá všechny exportované objekty se zadaným názvem kontraktu.

(Zděděno od ExportProvider)
GetExports(ImportDefinition, AtomicComposition)

Získá všechny exporty, které odpovídají podmínkám zadané definice a složení importu.

(Zděděno od ExportProvider)
GetExports(ImportDefinition)

Získá všechny exporty, které odpovídají podmínkám zadané definice importu.

(Zděděno od ExportProvider)
GetExports(Type, Type, String)

Získá všechny exporty se zadaným názvem kontraktu.

(Zděděno od ExportProvider)
GetExports<T,TMetadataView>()

Získá všechny exporty s názvem kontrakt odvozený ze zadaného parametru typu.

(Zděděno od ExportProvider)
GetExports<T,TMetadataView>(String)

Získá všechny exporty se zadaným názvem kontraktu.

(Zděděno od ExportProvider)
GetExports<T>()

Získá všechny exporty s názvem kontrakt odvozený ze zadaného parametru typu.

(Zděděno od ExportProvider)
GetExports<T>(String)

Získá všechny exporty se zadaným názvem kontraktu.

(Zděděno od ExportProvider)
GetExportsCore(ImportDefinition, AtomicComposition)

Vrátí kolekci všech exportů, které odpovídají podmínkám v zadaném ImportDefinition objektu.

GetHashCode()

Slouží jako výchozí funkce hash.

(Zděděno od Object)
GetType()

Získá Type aktuální instance.

(Zděděno od Object)
MemberwiseClone()

Vytvoří mělkou kopii aktuálního Object.

(Zděděno od Object)
OnExportsChanged(ExportsChangeEventArgs)

ExportsChanged Vyvolá událost.

(Zděděno od ExportProvider)
OnExportsChanging(ExportsChangeEventArgs)

ExportsChanging Vyvolá událost.

(Zděděno od ExportProvider)
ReleaseExport(Export)

Uvolní zadaný Export objekt z objektu CompositionContainer.

ReleaseExport<T>(Lazy<T>)

Odebere zadaný export ze složení a pokud je to možné, uvolní jeho prostředky.

ReleaseExports(IEnumerable<Export>)

Uvolní sadu Export objektů z objektu CompositionContainer.

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

Odebere kolekci exportů ze složení a pokud je to možné, uvolní jejich prostředky.

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

Odebere kolekci exportů ze složení a pokud je to možné, uvolní jejich prostředky.

SatisfyImportsOnce(ComposablePart)

Splňuje import zadaného ComposablePart objektu bez registrace pro rekompozici.

ToString()

Vrátí řetězec, který představuje aktuální objekt.

(Zděděno od Object)
TryGetExports(ImportDefinition, AtomicComposition, IEnumerable<Export>)

Získá všechny exporty, které odpovídají podmínkám zadaného importu.

(Zděděno od ExportProvider)

Událost

Name Description
ExportsChanged

Nastane při exportu ExportProvider ve změně.

(Zděděno od ExportProvider)
ExportsChanging

Nastane, když se zadané exporty mění.

(Zděděno od ExportProvider)

Metody rozšíření

Name Description
ComposeExportedValue<T>(CompositionContainer, String, T)

Vytvoří část ze zadaného objektu pod zadaným názvem kontraktu a vytvoří ji v zadaném kontejneru složení.

ComposeExportedValue<T>(CompositionContainer, T)

Vytvoří část ze zadané hodnoty a vytvoří ji v zadaném kontejneru složení.

ComposeParts(CompositionContainer, Object[])

Vytvoří kompozovatelné části z pole atributů objektů a vytvoří je v zadaném kontejneru složení.

SatisfyImportsOnce(ICompositionService, Object, ReflectionContext)

Sesloží zadanou část pomocí zadané služby složení s rekompozicí zakázanou a použitím zadaného kontextu reflexe.

SatisfyImportsOnce(ICompositionService, Object)

Sesloží zadanou část pomocí zadané služby složení s vypnutou rekompozicí.

Platí pro

Viz také