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 инициализируется каталогом и используется для заполнения импорта части. В этом примере используется модель программирования атрибутов.
[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[]). Производительность будет немного медленнее, если isThreadSafe
true
, поэтому рекомендуется задать этот параметр для 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) |
Создает указанную часть с помощью указанной службы композиции с отключенным перекомпозицией. |
Применяется к
См. также раздел
- Обзор модели программирования