CompositionContainer 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
管理組件的撰寫。
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 物件會使用目錄初始化,並用來填入元件的匯入。 此範例使用 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
來建構。 當 為 時isThreadSafe
true
,效能會稍微變慢,因此建議您在單個線程案例中將此參數設定為 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 物件的存取。 |
方法
事件
ExportsChanged |
當 ExportProvider 中的匯出變更時發生。 (繼承來源 ExportProvider) |
ExportsChanging |
當提供的匯出變更時發生。 (繼承來源 ExportProvider) |
擴充方法
ComposeExportedValue<T>(CompositionContainer, T) |
從指定的值建立組件,並且在指定的撰寫容器中撰寫它。 |
ComposeExportedValue<T>(CompositionContainer, String, T) |
依據指定之合約名稱,從指定的物件建立組件,並且在指定的撰寫容器中撰寫它。 |
ComposeParts(CompositionContainer, Object[]) |
從屬性化物件的陣列建立可組合的組件,並且在指定的撰寫容器中撰寫它們。 |
SatisfyImportsOnce(ICompositionService, Object) |
在停用重新撰寫的情況下,使用指定的撰寫服務撰寫指定的組件。 |
SatisfyImportsOnce(ICompositionService, Object, ReflectionContext) |
使用指定的撰寫服務 (其中已停用重新撰寫) 並使用指定的反映內容,以撰寫指定的組件。 |