CompositionContainer 類別

定義

管理組件的撰寫。

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
繼承
CompositionContainer
實作

範例

在下列範例中, CompositionContainer 物件會使用目錄初始化,並用來填入元件的匯入。 此範例使用 Attributed 程式設計模型。

[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

備註

CompositionContainer物件在應用程式中有兩個主要用途。 首先,它會追蹤哪些元件可用於組合及其相依性,並在可用元件集變更時執行組合。 其次,它會提供方法,讓應用程式取得組成元件的實例,或填滿可組合元件的相依性。

重要

此型別代表 IDisposable 介面。 當您完成使用型別時,您應該直接或間接處置它。 若要直接處置型別,請呼叫其 try/catch 區塊中的 Dispose 方法。 若要間接處置它,請使用語言建構函式,例如 using (在 C# 中) 或 Using (在 Visual Basic 中)。 如需詳細資訊,請參閱 IDisposable 介面文章中的<使用實作 IDisposable 的物件>一節。

元件可以直接或透過 Catalog 屬性提供給容器。 此 ComposablePartCatalog 中可探索到的所有元件都可供容器完成匯入,以及直接新增的任何元件。

方法 Compose 可讓具現化元件新增至現有的容器。 假設組合成功,這些部分的匯入會填入從容器擷取的元件,而且其匯出將可供其他元件使用。 標示為可重新編譯的匯入將會註冊重新合併。

方法 SatisfyImportsOnce 可讓元件填入其匯入,而不會新增至容器。 如果組合成功,則會填入元件的匯入,但元件的匯出將無法供其他元件使用,而且不會註冊任何匯入以進行重新組合。

CompositionContainer 應該一律處置 物件。 Dispose呼叫 方法時, CompositionContainer 物件也會處置它所建立的所有元件。

CompositionContainer您可以從多個執行緒存取的物件,必須使用 建 CompositionContainer(ComposablePartCatalog, Boolean, ExportProvider[]) 構函式將 isThreadSafe 參數設定為 true 來建構。 當 為 時 isThreadSafetrue ,效能會稍微變慢,因此建議您在單一執行緒案例中將此參數設定為 false 。 預設為 false

警告

CompositionContainer絕對不應該匯入本身,或是具有其參考的元件。 這類參考可能會允許不受信任的元件存取容器中的所有元件。

建構函式

CompositionContainer()

初始化 CompositionContainer 類別的新執行個體。

CompositionContainer(ComposablePartCatalog, Boolean, ExportProvider[])

使用指定的目錄、安全執行緒模式和匯出提供者,初始化 CompositionContainer 類別的新執行個體。

CompositionContainer(ComposablePartCatalog, CompositionOptions, ExportProvider[])

使用指定的目錄、選項和匯出提供者,初始化 CompositionContainer 類別的新執行個體。

CompositionContainer(ComposablePartCatalog, ExportProvider[])

使用指定的目錄和匯出提供者,初始化 CompositionContainer 類別的新執行個體。

CompositionContainer(CompositionOptions, ExportProvider[])

使用指定的匯出提供者和選項,初始化 CompositionContainer 類別的新執行個體。

CompositionContainer(ExportProvider[])

使用指定的匯出提供者,初始化 CompositionContainer 類別的新執行個體。

屬性

Catalog

取得 ComposablePartCatalog,其可提供容器對 Export 物件的存取。

Providers

取得匯出提供者,這些提供者可提供容器對額外 ComposablePartCatalog 物件的存取。

方法

Compose(CompositionBatch)

在容器中加入或移除指定之 CompositionBatch 的組件,然後執行撰寫。

Dispose()

釋放 CompositionContainer 類別目前的執行個體所使用的全部資源。

Dispose(Boolean)

釋放 CompositionContainer 所使用的 Unmanaged 資源,並選擇性地釋放 Managed 資源。

Equals(Object)

判斷指定的物件是否等於目前的物件。

(繼承來源 Object)
GetExport<T,TMetadataView>()

傳回具有從指定型別參數中衍生之合約名稱的匯出。 如果沒有任何項目完全符合匯出結果,則擲回例外狀況。

(繼承來源 ExportProvider)
GetExport<T,TMetadataView>(String)

傳回具有指定合約名稱的匯出。 如果沒有任何項目完全符合匯出結果,則擲回例外狀況。

(繼承來源 ExportProvider)
GetExport<T>()

傳回具有從指定型別參數中衍生之合約名稱的匯出。 如果沒有任何項目完全符合匯出結果,則擲回例外狀況。

(繼承來源 ExportProvider)
GetExport<T>(String)

傳回具有指定合約名稱的匯出。 如果沒有任何項目完全符合匯出結果,則擲回例外狀況。

(繼承來源 ExportProvider)
GetExportedValue<T>()

傳回具有從指定型別參數中衍生之合約名稱的匯出物件。 如果沒有一個完全相符的匯出物件,則會擲回例外狀況。

(繼承來源 ExportProvider)
GetExportedValue<T>(String)

傳回具有指定合約名稱的匯出物件。 如果沒有一個完全相符的匯出物件,則會擲回例外狀況。

(繼承來源 ExportProvider)
GetExportedValueOrDefault<T>()

取得具有從指定型別參數或指定型別的預設值衍生之合約名稱的匯出物件,或者如果有一個以上相符的匯出物件,則擲回例外狀況。

(繼承來源 ExportProvider)
GetExportedValueOrDefault<T>(String)

取得具有指定合約名稱或指定型別預設值的匯出物件,或者如果有一個以上相符的匯出物件,則擲回例外狀況。

(繼承來源 ExportProvider)
GetExportedValues<T>()

取得具有從指定型別參數中衍生之合約名稱的匯出物件。

(繼承來源 ExportProvider)
GetExportedValues<T>(String)

取得具有指定合約名稱的所有匯出物件。

(繼承來源 ExportProvider)
GetExports(ImportDefinition)

取得符合指定之匯入定義條件的所有匯出。

(繼承來源 ExportProvider)
GetExports(ImportDefinition, AtomicComposition)

取得符合指定匯入定義和撰寫條件的所有匯出。

(繼承來源 ExportProvider)
GetExports(Type, Type, String)

取得具有指定之合約名稱的所有匯出結果。

(繼承來源 ExportProvider)
GetExports<T,TMetadataView>()

取得具有從指定型別參數衍生之合約名稱的所有匯出。

(繼承來源 ExportProvider)
GetExports<T,TMetadataView>(String)

取得具有指定之合約名稱的所有匯出結果。

(繼承來源 ExportProvider)
GetExports<T>()

取得具有從指定型別參數衍生之合約名稱的所有匯出。

(繼承來源 ExportProvider)
GetExports<T>(String)

取得具有指定之合約名稱的所有匯出結果。

(繼承來源 ExportProvider)
GetExportsCore(ImportDefinition, AtomicComposition)

傳回符合指定 ImportDefinition 物件之條件的所有匯出集合。

GetHashCode()

做為預設雜湊函式。

(繼承來源 Object)
GetType()

取得目前執行個體的 Type

(繼承來源 Object)
MemberwiseClone()

建立目前 Object 的淺層複製。

(繼承來源 Object)
OnExportsChanged(ExportsChangeEventArgs)

引發 ExportsChanged 事件。

(繼承來源 ExportProvider)
OnExportsChanging(ExportsChangeEventArgs)

引發 ExportsChanging 事件。

(繼承來源 ExportProvider)
ReleaseExport(Export)

Export 釋放指定的 CompositionContainer 物件。

ReleaseExport<T>(Lazy<T>)

從複合移除指定的匯出結果,可能的話,亦釋放其資源。

ReleaseExports(IEnumerable<Export>)

Export 釋放一組 CompositionContainer 物件。

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

從複合移除匯出結果的集合,可能的話,亦釋放其資源。

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

從複合移除匯出結果的集合,可能的話,亦釋放其資源。

SatisfyImportsOnce(ComposablePart)

滿足指定之 ComposablePart 物件的匯入,而不需註冊重新撰寫。

ToString()

傳回代表目前物件的字串。

(繼承來源 Object)
TryGetExports(ImportDefinition, AtomicComposition, IEnumerable<Export>)

取得符合指定之匯入條件的所有匯出。

(繼承來源 ExportProvider)

事件

ExportsChanged

ExportProvider 中的匯出變更時發生。

(繼承來源 ExportProvider)
ExportsChanging

當提供的匯出變更時發生。

(繼承來源 ExportProvider)

擴充方法

ComposeExportedValue<T>(CompositionContainer, T)

從指定的值建立組件,並且在指定的撰寫容器中撰寫它。

ComposeExportedValue<T>(CompositionContainer, String, T)

依據指定之合約名稱,從指定的物件建立組件,並且在指定的撰寫容器中撰寫它。

ComposeParts(CompositionContainer, Object[])

從屬性化物件的陣列建立可組合的組件,並且在指定的撰寫容器中撰寫它們。

SatisfyImportsOnce(ICompositionService, Object)

在停用重新撰寫的情況下,使用指定的撰寫服務撰寫指定的組件。

SatisfyImportsOnce(ICompositionService, Object, ReflectionContext)

使用指定的撰寫服務 (其中已停用重新撰寫) 並使用指定的反映內容,以撰寫指定的組件。

適用於

另請參閱