Поделиться через


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. Завершив использование типа, его следует удалить напрямую или косвенно. Чтобы удалить тип напрямую, вызовите метод Dispose в блоке try/catch. Чтобы удалить его косвенно, используйте конструкцию языка, например using (в C#) или Using (в Visual Basic). Дополнительные сведения см. в разделе "Использование объекта, реализующего IDisposable" в разделе интерфейса IDisposable.

Части можно сделать доступными для контейнера напрямую или через свойство Catalog. Все обнаруженные в этом ComposablePartCatalog части доступны контейнеру для выполнения импорта, а также всех частей, добавленных напрямую.

Метод Compose позволяет добавлять экземпляры частей в существующий контейнер. Предполагая, что композиция выполнена успешно, эти части будут заполнены их импортами с частями, извлеченными из контейнера, и их экспорт будет доступен другим частям. Импорты, помеченные как повторно композируемые, будут зарегистрированы для повторного размещения.

Метод SatisfyImportsOnce позволяет части заполнять свои импорты без добавления в контейнер. Если композиция выполнена успешно, импорт части будет заполнен, но экспорт части не будет доступен другим частям, и импорт не будет зарегистрирован для повторного размещения.

CompositionContainer объекты всегда должны быть удалены. При вызове метода Dispose объект CompositionContainer также удаляет все созданные части.

Объект CompositionContainer, к которому можно получить доступ из нескольких потоков, должен быть создан с помощью параметра isThreadSafe, заданного для true, с помощью конструктора CompositionContainer(ComposablePartCatalog, Boolean, ExportProvider[]). Производительность будет немного медленнее, если isThreadSafetrue, поэтому рекомендуется задать этот параметр для 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, 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)

События

ExportsChanged

Происходит при экспорте в ExportProvider изменения.

(Унаследовано от ExportProvider)
ExportsChanging

Происходит при изменении предоставленных экспортов.

(Унаследовано от ExportProvider)

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

ComposeExportedValue<T>(CompositionContainer, T)

Создает часть из указанного значения и создает ее в указанном контейнере композиции.

ComposeExportedValue<T>(CompositionContainer, String, T)

Создает часть из указанного объекта под указанным именем контракта и создает ее в указанном контейнере композиции.

ComposeParts(CompositionContainer, Object[])

Создает составные части из массива объектов с атрибутами и создает их в указанном контейнере композиции.

SatisfyImportsOnce(ICompositionService, Object, ReflectionContext)

Создает указанную часть с помощью указанной службы композиции с отключенным перекомпозицией и с помощью указанного контекста отражения.

SatisfyImportsOnce(ICompositionService, Object)

Создает указанную часть с помощью указанной службы композиции с отключенным перекомпозицией.

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

См. также раздел

  • Обзор модели программирования