共用方式為


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 Programming Model)。

[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 介面。 當您完成使用這個物品後,應直接或間接地處理它。 若要直接處置類型,請在 Disposetry/ 區塊中呼叫其 catch 方法。 若要間接處置它,請使用語言建構,例如 using (C#) 或 Using (在 Visual Basic 中)。 如需詳細資訊,請參閱介面主題中的 <使用實作 IDisposable 的物件>一節。

零件可以直接或透過 Catalog 物業提供給貨櫃。 所有在貨 ComposablePartCatalog 櫃中發現的零件都可以直接提供給貨櫃來完成進口,還有直接添加的零件。

Compose 方法允許將實例化的零件加入現有容器中。 假設合成成功,這些零件的進口品將被從容器回收的零件填滿,出口品則可供應給其他零件。 標示為可重組的進口將被註冊重組。

SatisfyImportsOnce 方法允許零件在不加入容器的情況下被填滿進口貨物。 若組合成功,該零件的進口將被填補,但該零件的出口將無法提供給其他零件,且不會有進口貨物登記重組。

CompositionContainer 物品應該始終被處理掉。 當 Dispose 方法被呼叫時,物件 CompositionContainer 也會丟棄它所建立的所有部分。

CompositionContainer一個可從多個執行緒存取的物件,isThreadSafe必須使用CompositionContainer(ComposablePartCatalog, Boolean, ExportProvider[])建構子將參數設為 true。 當 isThreadSafetrue時,效能會稍微慢一些,因此我們建議你在單執行緒情境下將此參數設為 。false 預設值為 false

警告

CompositionContainer A 絕對不應該匯入自己,或是有參考的零件。 這樣的參考可能讓不受信任的部分取得容器中的所有部分。

建構函式

名稱 Description
CompositionContainer()

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

CompositionContainer(ComposablePartCatalog, Boolean, ExportProvider[])

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

CompositionContainer(ComposablePartCatalog, CompositionOptions, ExportProvider[])

初始化類別的新實例 CompositionContainer ,並使用指定的目錄、選項和匯出提供者。

CompositionContainer(ComposablePartCatalog, ExportProvider[])

初始化該類別的新實例 CompositionContainer ,並使用指定的目錄與匯出提供者。

CompositionContainer(CompositionOptions, ExportProvider[])

初始化該類別的新實例 CompositionContainer ,並使用指定的匯出提供者與選項。

CompositionContainer(ExportProvider[])

初始化該類別的新實例 CompositionContainer ,使用指定的匯出提供者。

屬性

名稱 Description
Catalog

取得 ComposablePartCatalog 提供容器存取 Export 物件的 。

Providers

取得提供容器存取額外 ComposablePartCatalog 物件的匯出提供者。

方法

名稱 Description
Compose(CompositionBatch)

從容器中新增或移除指定的 CompositionBatch 部分,並執行組合。

Dispose()

釋放目前類別實例 CompositionContainer 所使用的所有資源。

Dispose(Boolean)

釋放 未管理的資源, CompositionContainer 並可選擇性地釋放受管理資源。

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, AtomicComposition)

取得所有符合指定進口定義與組合條件的匯出。

(繼承來源 ExportProvider)
GetExports(ImportDefinition)

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

(繼承來源 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)

事件

名稱 Description
ExportsChanged

當匯出 ExportProvider 變更時會發生。

(繼承來源 ExportProvider)
ExportsChanging

當提供的出口資料變動時,會發生這種情況。

(繼承來源 ExportProvider)

擴充方法

名稱 Description
ComposeExportedValue<T>(CompositionContainer, String, T)

從指定的物件中建立一個部分,並以指定的合約名稱進行,並將其組合在指定的組合容器中。

ComposeExportedValue<T>(CompositionContainer, T)

從指定的值建立一個零件,並將其組合到指定的組合容器中。

ComposeParts(CompositionContainer, Object[])

從一組屬性物件陣列中建立可組合的部分,並在指定的組合容器中組合。

SatisfyImportsOnce(ICompositionService, Object, ReflectionContext)

使用指定的合成服務組合指定部分,關閉重組並使用指定的反射上下文。

SatisfyImportsOnce(ICompositionService, Object)

使用指定的合成服務組合指定部分,且關閉重組功能。

適用於

另請參閱