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 对象使用目录初始化,并用于填充部件的导入。 此示例使用特性化编程模型。
[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[])。 当 为 true
时isThreadSafe
,性能将略慢,因此建议在单线程方案中将此参数设置为 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) |
通过使用指定的组合服务并禁用重新组合及使用指定的反射上下文来组合指定的部件。 |