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 对象使用目录初始化,并用于填充部件的导入。 此示例使用特性化编程模型。

[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必须使用 构造函数将 参数设置为 true来构造isThreadSafe可从多个线程访问的对象CompositionContainer(ComposablePartCatalog, Boolean, ExportProvider[])。 当 为 trueisThreadSafe,性能将略慢,因此建议在单线程方案中将此参数设置为 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 占用的非托管资源,还可以另外再释放托管资源。

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)

通过使用指定的组合服务并禁用重新组合及使用指定的反射上下文来组合指定的部件。

适用于

另请参阅