CompositionContainer CompositionContainer CompositionContainer CompositionContainer Class

Определение

Управляет композицией частей.Manages the composition of parts.

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
Наследование
CompositionContainerCompositionContainerCompositionContainerCompositionContainer
Реализации

Примеры

В следующем примере CompositionContainer объект инициализируется с помощью каталога и используется для заполнения импортов части.In the following example, a CompositionContainer object is initialized with a catalog and is used to fill the imports of a part. В этом примере используется модель атрибутивного программирования.This example uses the 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 Объект служит двум основным целям в приложении.A CompositionContainer object serves two major purposes in an application. Во первых, он отслеживает, какие части доступны для композиции и каковы их зависимости, и выполняет композицию при каждом изменении набора доступных частей.First, it keeps track of which parts are available for composition and what their dependencies are, and performs composition whenever the set of available parts changes. Во-вторых, он предоставляет методы, с помощью которых приложение получает экземпляры составных частей или заполняет зависимости частичной композиции.Second, it provides the methods by which the application gets instances of composed parts or fills the dependencies of a composable part.

Важно!

Этот тип реализует интерфейс IDisposable.This type implements the IDisposable interface. По окончании использования выдаленную ему память следует прямо или косвенно освободить.When you have finished using the type, you should dispose of it either directly or indirectly. Чтобы сделать это прямо, вызовите его метод Dispose в блоке try/catch.To dispose of the type directly, call its Dispose method in a try/catch block. Чтобы сделать это косвенно, используйте языковые конструкции, такие как using (в C#) или Using (в Visual Basic).To dispose of it indirectly, use a language construct such as using (in C#) or Using (in Visual Basic). Дополнительные сведения см. в разделе "Использование объекта, реализующего IDisposable" в статье об интерфейсе IDisposable.For more information, see the "Using an Object that Implements IDisposable" section in the IDisposable interface topic.

Части можно сделать доступными для контейнера либо напрямую, либо с помощью Catalog свойства.Parts can be made available to the container either directly or through the Catalog property. Все части, обнаруживаемые в этой ComposablePartCatalog службе, доступны контейнеру для выполнения операций импорта, а также добавленных непосредственно компонентов.All the parts discoverable in this ComposablePartCatalog are available to the container to fulfill imports, along with any parts added directly.

Compose Метод позволяет добавлять экземпляры частей в существующий контейнер.The Compose method allows instantiated parts to be added to an existing container. При условии, что композиция выполнена успешно, импортируемые компоненты будут заполнены частями, полученными из контейнера, и их экспорт будет доступен для других частей.Assuming composition is successful, these parts will have their imports filled with parts retrieved from the container, and their exports will be available to other parts. Импорты, помеченные как таким, будут зарегистрированы для повторной композиции.Imports marked as recomposable will be registered for recomposition.

SatisfyImportsOnce Метод позволяет компоненту импортировать элементы Imports без добавления в контейнер.The SatisfyImportsOnce method allows a part to have its imports filled without being added to the container. Если композиция выполнена успешно, импорты части будут заполнены, но экспорты части будут недоступны для других частей, а импорт не будет зарегистрирован для повторной композиции.If the composition is successful, the part's imports will be filled, but the part's exports will not be available to other parts and no imports will be registered for recomposition.

CompositionContainerобъекты всегда должны быть удалены.CompositionContainer objects should always be disposed. При вызове CompositionContainer метода объект удаляет все созданные им части. DisposeWhen the Dispose method is called, the CompositionContainer object also disposes all the parts that it has created.

Объект, к которому можно получить доступ из нескольких trueпотоков, должен быть создан isThreadSafe с параметром, CompositionContainer(ComposablePartCatalog, Boolean, ExportProvider[]) имеющим значение, с помощью конструктора. CompositionContainerA CompositionContainer object that can be accessed from multiple threads must be constructed with the isThreadSafe parameter set to true, using the CompositionContainer(ComposablePartCatalog, Boolean, ExportProvider[]) constructor. Если isThreadSafe задано значение true, производительность будет немного ниже, поэтому рекомендуется присвоить этому параметру false значение в сценариях с одним потоком.Performance will be slightly slower when isThreadSafe is true, so we recommend that you set this parameter to false in single-threaded scenarios. Значение по умолчанию — false.The default is false.

Предупреждение

Никогда CompositionContainer не должен импортировать сам себя или часть со ссылкой на него.A CompositionContainer should never import itself, or a part that has a reference to it. Такая ссылка может позволить ненадежной части получить доступ ко всем частям в контейнере.Such a reference could allow an untrusted part to gain access all the parts in the container.

Конструкторы

CompositionContainer() CompositionContainer() CompositionContainer() CompositionContainer()

Инициализирует новый экземпляр класса CompositionContainer.Initializes a new instance of the CompositionContainer class.

CompositionContainer(ComposablePartCatalog, Boolean, ExportProvider[]) CompositionContainer(ComposablePartCatalog, Boolean, ExportProvider[]) CompositionContainer(ComposablePartCatalog, Boolean, ExportProvider[]) CompositionContainer(ComposablePartCatalog, Boolean, ExportProvider[])

Инициализирует новый экземпляр класса CompositionContainer указанными каталогом, потокобезопасным режимом и поставщиками экспорта.Initializes a new instance of the CompositionContainer class with the specified catalog, thread-safe mode, and export providers.

CompositionContainer(ComposablePartCatalog, CompositionOptions, ExportProvider[]) CompositionContainer(ComposablePartCatalog, CompositionOptions, ExportProvider[]) CompositionContainer(ComposablePartCatalog, CompositionOptions, ExportProvider[]) CompositionContainer(ComposablePartCatalog, CompositionOptions, ExportProvider[])

Инициализирует новый экземпляр класса CompositionContainer с указанным каталогом, параметрами и поставщиками экспортов.Initializes a new instance of the CompositionContainer class with the specified catalog, options, and export providers.

CompositionContainer(ComposablePartCatalog, ExportProvider[]) CompositionContainer(ComposablePartCatalog, ExportProvider[]) CompositionContainer(ComposablePartCatalog, ExportProvider[]) CompositionContainer(ComposablePartCatalog, ExportProvider[])

Инициализирует новый экземпляр класса CompositionContainer указанными каталогом и поставщиками экспортов.Initializes a new instance of the CompositionContainer class with the specified catalog and export providers.

CompositionContainer(CompositionOptions, ExportProvider[]) CompositionContainer(CompositionOptions, ExportProvider[]) CompositionContainer(CompositionOptions, ExportProvider[]) CompositionContainer(CompositionOptions, ExportProvider[])

Инициализирует новый экземпляр класса CompositionContainer с указанными поставщиками экспортов и параметрами.Initializes a new instance of the CompositionContainer class with the specified export providers and options.

CompositionContainer(ExportProvider[]) CompositionContainer(ExportProvider[]) CompositionContainer(ExportProvider[]) CompositionContainer(ExportProvider[])

Инициализирует новый экземпляр класса CompositionContainer указанными поставщиками экспортов.Initializes a new instance of the CompositionContainer class with the specified export providers.

Свойства

Catalog Catalog Catalog Catalog

Получает объект ComposablePartCatalog, который предоставляет контейнеру доступ к объектам Export.Gets the ComposablePartCatalog that provides the container access to Export objects.

Providers Providers Providers Providers

Получает поставщики экспортов, которые предоставляют контейнеру доступ к дополнительным объектам ComposablePartCatalog.Gets the export providers that provide the container access to additional ComposablePartCatalog objects.

Методы

Compose(CompositionBatch) Compose(CompositionBatch) Compose(CompositionBatch) Compose(CompositionBatch)

Добавляет в контейнер или удаляет из контейнера части, содержащиеся в указанном объекте CompositionBatch, и выполняет композицию.Adds or removes the parts in the specified CompositionBatch from the container and executes composition.

Dispose() Dispose() Dispose() Dispose()

Освобождает все ресурсы, используемые текущим экземпляром класса CompositionContainer.Releases all resources used by the current instance of the CompositionContainer class.

Dispose(Boolean) Dispose(Boolean) Dispose(Boolean) Dispose(Boolean)

Освобождает неуправляемые ресурсы, используемые объектом CompositionContainer, а при необходимости освобождает также управляемые ресурсы.Releases the unmanaged resources used by the CompositionContainer and optionally releases the managed resources.

Equals(Object) Equals(Object) Equals(Object) Equals(Object)

Определяет, равен ли заданный объект текущему объекту.Determines whether the specified object is equal to the current object.

(Inherited from Object)
GetExport<T,TMetadataView>() GetExport<T,TMetadataView>() GetExport<T,TMetadataView>() GetExport<T,TMetadataView>()

Возвращает экспорт с именем контракта, производным от указанного параметра типа.Returns the export with the contract name derived from the specified type parameter. В случае отсутствия ровно одного соответствующего экспорта создается исключение.If there is not exactly one matching export, an exception is thrown.

(Inherited from ExportProvider)
GetExport<T,TMetadataView>(String) GetExport<T,TMetadataView>(String) GetExport<T,TMetadataView>(String) GetExport<T,TMetadataView>(String)

Возвращает экспорт с указанным именем контракта.Returns the export with the specified contract name. В случае отсутствия ровно одного соответствующего экспорта создается исключение.If there is not exactly one matching export, an exception is thrown.

(Inherited from ExportProvider)
GetExport<T>() GetExport<T>() GetExport<T>() GetExport<T>()

Возвращает экспорт с именем контракта, производным от указанного параметра типа.Returns the export with the contract name derived from the specified type parameter. В случае отсутствия ровно одного соответствующего экспорта создается исключение.If there is not exactly one matching export, an exception is thrown.

(Inherited from ExportProvider)
GetExport<T>(String) GetExport<T>(String) GetExport<T>(String) GetExport<T>(String)

Возвращает экспорт с указанным именем контракта.Returns the export with the specified contract name. В случае отсутствия ровно одного соответствующего экспорта создается исключение.If there is not exactly one matching export, an exception is thrown.

(Inherited from ExportProvider)
GetExportedValue<T>() GetExportedValue<T>() GetExportedValue<T>() GetExportedValue<T>()

Возвращает экспортированный объект с именем контракта, производным от указанного параметра типа.Returns the exported object with the contract name derived from the specified type parameter. В случае отсутствия ровно одного соответствующего экспортированного объекта создается исключение.If there is not exactly one matching exported object, an exception is thrown.

(Inherited from ExportProvider)
GetExportedValue<T>(String) GetExportedValue<T>(String) GetExportedValue<T>(String) GetExportedValue<T>(String)

Возвращает экспортированный объект с указанным именем контракта.Returns the exported object with the specified contract name. В случае отсутствия ровно одного соответствующего экспортированного объекта создается исключение.If there is not exactly one matching exported object, an exception is thrown.

(Inherited from ExportProvider)
GetExportedValueOrDefault<T>() GetExportedValueOrDefault<T>() GetExportedValueOrDefault<T>() GetExportedValueOrDefault<T>()

Получает экспортированный объект с именем контракта, производным от указанного параметра типа, или значение по умолчанию для указанного типа. При наличии более одного соответствующего экспортированного объекта создается исключение.Gets the exported object with the contract name derived from the specified type parameter or the default value for the specified type, or throws an exception if there is more than one matching exported object.

(Inherited from ExportProvider)
GetExportedValueOrDefault<T>(String) GetExportedValueOrDefault<T>(String) GetExportedValueOrDefault<T>(String) GetExportedValueOrDefault<T>(String)

Получает экспортированный объект с заданным именем контракта или значение по умолчанию для указанного типа. При наличии более одного соответствующего экспортированного объекта создается исключение.Gets the exported object with the specified contract name or the default value for the specified type, or throws an exception if there is more than one matching exported object.

(Inherited from ExportProvider)
GetExportedValues<T>() GetExportedValues<T>() GetExportedValues<T>() GetExportedValues<T>()

Получает экспортированные объекты с именем контракта, производным от указанного параметра типа.Gets all the exported objects with the contract name derived from the specified type parameter.

(Inherited from ExportProvider)
GetExportedValues<T>(String) GetExportedValues<T>(String) GetExportedValues<T>(String) GetExportedValues<T>(String)

Получает экспортированные объекты с указанным именем контракта.Gets all the exported objects with the specified contract name.

(Inherited from ExportProvider)
GetExports(ImportDefinition) GetExports(ImportDefinition) GetExports(ImportDefinition) GetExports(ImportDefinition)

Получает все экспорты, которые соответствуют условиям указанного определения импорта.Gets all exports that match the conditions of the specified import definition.

(Inherited from ExportProvider)
GetExports(ImportDefinition, AtomicComposition) GetExports(ImportDefinition, AtomicComposition) GetExports(ImportDefinition, AtomicComposition) GetExports(ImportDefinition, AtomicComposition)

Получает все экспорты, которые соответствуют условиям указанного определения импорта и композиции.Gets all exports that match the conditions of the specified import definition and composition.

(Inherited from ExportProvider)
GetExports(Type, Type, String) GetExports(Type, Type, String) GetExports(Type, Type, String) GetExports(Type, Type, String)

Получает экспорты с указанным именем контракта.Gets all the exports with the specified contract name.

(Inherited from ExportProvider)
GetExports<T,TMetadataView>() GetExports<T,TMetadataView>() GetExports<T,TMetadataView>() GetExports<T,TMetadataView>()

Получает все экспорты с именем контракта, производным от указанного параметра типа.Gets all the exports with the contract name derived from the specified type parameter.

(Inherited from ExportProvider)
GetExports<T,TMetadataView>(String) GetExports<T,TMetadataView>(String) GetExports<T,TMetadataView>(String) GetExports<T,TMetadataView>(String)

Получает экспорты с указанным именем контракта.Gets all the exports with the specified contract name.

(Inherited from ExportProvider)
GetExports<T>() GetExports<T>() GetExports<T>() GetExports<T>()

Получает все экспорты с именем контракта, производным от указанного параметра типа.Gets all the exports with the contract name derived from the specified type parameter.

(Inherited from ExportProvider)
GetExports<T>(String) GetExports<T>(String) GetExports<T>(String) GetExports<T>(String)

Получает экспорты с указанным именем контракта.Gets all the exports with the specified contract name.

(Inherited from ExportProvider)
GetExportsCore(ImportDefinition, AtomicComposition) GetExportsCore(ImportDefinition, AtomicComposition) GetExportsCore(ImportDefinition, AtomicComposition) GetExportsCore(ImportDefinition, AtomicComposition)

Возвращает коллекцию всех экспортов, которые соответствуют условиям в указанном объекте ImportDefinition.Returns a collection of all exports that match the conditions in the specified ImportDefinition object.

GetHashCode() GetHashCode() GetHashCode() GetHashCode()

Служит хэш-функцией по умолчанию.Serves as the default hash function.

(Inherited from Object)
GetType() GetType() GetType() GetType()

Возвращает объект Type для текущего экземпляра.Gets the Type of the current instance.

(Inherited from Object)
MemberwiseClone() MemberwiseClone() MemberwiseClone() MemberwiseClone()

Создает неполную копию текущего объекта Object.Creates a shallow copy of the current Object.

(Inherited from Object)
OnExportsChanged(ExportsChangeEventArgs) OnExportsChanged(ExportsChangeEventArgs) OnExportsChanged(ExportsChangeEventArgs) OnExportsChanged(ExportsChangeEventArgs)

Вызывает событие ExportsChanged.Raises the ExportsChanged event.

(Inherited from ExportProvider)
OnExportsChanging(ExportsChangeEventArgs) OnExportsChanging(ExportsChangeEventArgs) OnExportsChanging(ExportsChangeEventArgs) OnExportsChanging(ExportsChangeEventArgs)

Создает событие ExportsChanging.Raises the ExportsChanging event.

(Inherited from ExportProvider)
ReleaseExport(Export) ReleaseExport(Export) ReleaseExport(Export) ReleaseExport(Export)

Освобождает указанный объект Export из объекта CompositionContainer.Releases the specified Export object from the CompositionContainer.

ReleaseExport<T>(Lazy<T>) ReleaseExport<T>(Lazy<T>) ReleaseExport<T>(Lazy<T>) ReleaseExport<T>(Lazy<T>)

Удаляет указанный экспорт из композиции и освобождает занятые им ресурсы, если это возможно.Removes the specified export from composition and releases its resources if possible.

ReleaseExports(IEnumerable<Export>) ReleaseExports(IEnumerable<Export>) ReleaseExports(IEnumerable<Export>) ReleaseExports(IEnumerable<Export>)

Освобождает набор объектов Export из объекта CompositionContainer.Releases a set of Export objects from the CompositionContainer.

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

Удаляет коллекцию экспортов из композиции и освобождает занятые ими ресурсы, если это возможно.Removes a collection of exports from composition and releases their resources if possible.

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

Удаляет коллекцию экспортов из композиции и освобождает занятые ими ресурсы, если это возможно.Removes a collection of exports from composition and releases their resources if possible.

SatisfyImportsOnce(ComposablePart) SatisfyImportsOnce(ComposablePart) SatisfyImportsOnce(ComposablePart) SatisfyImportsOnce(ComposablePart)

Удовлетворяет импорты указанного объекта ComposablePart без его регистрации для рекомпозиции.Satisfies the imports of the specified ComposablePart object without registering it for recomposition.

ToString() ToString() ToString() ToString()

Возвращает строку, представляющую текущий объект.Returns a string that represents the current object.

(Inherited from Object)
TryGetExports(ImportDefinition, AtomicComposition, IEnumerable<Export>) TryGetExports(ImportDefinition, AtomicComposition, IEnumerable<Export>) TryGetExports(ImportDefinition, AtomicComposition, IEnumerable<Export>) TryGetExports(ImportDefinition, AtomicComposition, IEnumerable<Export>)

Получает все элементы экспорта, которые соответствуют заданным параметрам импорта.Gets all the exports that match the conditions of the specified import.

(Inherited from ExportProvider)

События

ExportsChanged ExportsChanged ExportsChanged ExportsChanged

Происходит при изменении экспортов в объекте ExportProvider.Occurs when the exports in the ExportProvider change.

(Inherited from ExportProvider)
ExportsChanging ExportsChanging ExportsChanging ExportsChanging

Происходит при изменении предоставленных экспортов.Occurs when the provided exports are changing.

(Inherited from ExportProvider)

Методы расширения

ComposeExportedValue<T>(CompositionContainer, T) ComposeExportedValue<T>(CompositionContainer, T) ComposeExportedValue<T>(CompositionContainer, T) ComposeExportedValue<T>(CompositionContainer, T)

Создает часть из заданного значения и выполняет ее композицию в указанном контейнере композиции.Creates a part from the specified value and composes it in the specified composition container.

ComposeExportedValue<T>(CompositionContainer, String, T) ComposeExportedValue<T>(CompositionContainer, String, T) ComposeExportedValue<T>(CompositionContainer, String, T) ComposeExportedValue<T>(CompositionContainer, String, T)

Создает часть из заданного объекта в рамках указанного имени контракта и выполняет ее композицию в указанном контейнере композиции.Creates a part from the specified object under the specified contract name and composes it in the specified composition container.

ComposeParts(CompositionContainer, Object[]) ComposeParts(CompositionContainer, Object[]) ComposeParts(CompositionContainer, Object[]) ComposeParts(CompositionContainer, Object[])

Создает части с поддержкой композиции из массива помеченных атрибутами объектов и выполняет их композицию в указанном контейнере композиции.Creates composable parts from an array of attributed objects and composes them in the specified composition container.

SatisfyImportsOnce(ICompositionService, Object) SatisfyImportsOnce(ICompositionService, Object) SatisfyImportsOnce(ICompositionService, Object) SatisfyImportsOnce(ICompositionService, Object)

Выполняет композицию заданной части, используя указанную службу композиции, с выключенной рекомпозицией.Composes the specified part by using the specified composition service, with recomposition disabled.

SatisfyImportsOnce(ICompositionService, Object, ReflectionContext) SatisfyImportsOnce(ICompositionService, Object, ReflectionContext) SatisfyImportsOnce(ICompositionService, Object, ReflectionContext) SatisfyImportsOnce(ICompositionService, Object, ReflectionContext)

Составляет заданную часть, используя указанную службу композиции, с выключенной рекомпозицией и используя заданный контекст отражения.Composes the specified part by using the specified composition service, with recomposition disabled and using the specified reflection context.

Применяется к

Дополнительно