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 Объекты всегда должны быть удалены. При вызове DisposeCompositionContainer метода объект также удаляет все созданные им части.

Объект CompositionContainer , к которому можно получить доступ из нескольких потоков, должен быть создан с параметром isThreadSafe , равным true, с помощью конструктора 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.

Методы

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)

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

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

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