Разработка конвейера
Конвейер надстройки — это путь сегментов конвейера, которые используются основным приложением и его надстройкой для взаимодействия друг с другом.
На следующем рисунке показан конвейер взаимодействия и его сегменты.
Конвейер надстройки
Основное приложение находится на одном конце конвейера, а надстройка — на другом его конце. Начиная с каждого конца и перемещаясь к середине, как основное приложение, так и надстройка имеют абстрактный базовый класс, который определяет совместно используемое ими представление модели объекта. Эти типы (классы) создают сегмент конвейера "представление надстройки" и представление основного приложения сегмента конвейера надстройки. Сегмент конвейера "представление надстройки" часто содержит более одного абстрактного класса, однако класс, из которого наследует надстройка, известен как базовая надстройка.
Сегмент конвейера "адаптер на стороне надстройки" и сегмент конвейера "адаптер на стороне основного приложения" преобразует типы, передаваемые между сегментами конвейера "представление" и сегментом конвейера "контракт". Центральным сегментом конвейера считается контракт, который является производным из интерфейса IContract. Этот контракт определяет методы, которые будут использоваться основным приложением и его надстройкой.
При загрузке основного приложения и его надстройки в различные домены приложения возникнет граница изоляции, которая будет отделять область действия основного приложения от области действия надстройки. Контракт — это единственная сборка, которая загружается в домены приложения основного приложения и надстройки. Основное приложение и надстройка ссылаются только на собственное предоставление методов контракта. Поэтому они отделяются от контракта уровнем абстракции.
Чтобы разработать сегменты конвейера, необходимо создать структуру каталогов, которая будет их содержать. Дополнительные сведения о требованиях к разработке и правилах, относящихся к областям действия, см. в разделе Требования к разработке конвейера.
На следующем рисунке показаны типы, который составляют сегменты конвейера. Имена типов, показанных на рисунке, являются произвольными, однако все типы, кроме основного приложения и представления основного приложения, относящегося к надстройке, нуждаются в атрибутах, чтобы их могли обнаружить методы, составляющие хранилище данных.
Конвейер надстройки с типами
В следующем таблице показаны сегменты конвейера для активации надстройки. Дополнительные сведения об этих сегментах см. в разделе Контракты, представления и адаптеры.
Сегмент конвейера |
Описание |
---|---|
Основное приложение |
Сборка приложения, которая создает экземпляр надстройки. |
Представление основного приложения надстройки |
Представляет представление основного приложения типов объекта и методов, используемых для взаимодействия с надстройкой. Представление основного приложения — это абстрактный базовый класс или интерфейс. |
Адаптер основного приложения |
Сборка с одним или несколькими классами, которая преобразует методы в контракт или из него. Этот сегмент конвейера идентифицируется с помощью атрибута HostAdapterAttribute. Сборки с несколькими модулями не поддерживаются. |
Контракт |
Интерфейс, который является производным из интерфейса IContract и который определяет протокол для взаимодействующих типов между основным приложением и надстройкой. Этот сегмент конвейера определяется посредством задания атрибута AddInContractAttribute. |
Адаптер надстройки |
Сборка с одним или несколькими классами, которая преобразует методы в контракт или из него. Этот сегмент конвейера идентифицируется с помощью атрибута AddInAdapterAttribute. Каждая сборка в каталоге адаптера на стороне надстройки, содержащая тип с атрибутом AddInAdapterAttribute, загружается в домен приложения надстройки. Каждая сборка в каталоге на стороне надстройки загружается в собственный домен приложения. Сборки с несколькими модулями не поддерживаются. |
Представление надстройки |
Сборка, которая представляет представление основного приложения типов объекта и методов, используемых для взаимодействия с основным приложением. Представление надстройки — это абстрактный базовый класс или интерфейс. Этот сегмент конвейера идентифицируется с помощью атрибута AddInBaseAttribute. Каждая сборка в каталоге AddInViews, которая содержит тип с атрибутом AddInBaseAttribute, загружается в домен приложения надстройки. |
Надстройка |
Созданный экземпляр типа, который обслуживает основное приложение. |
Путь активации конвейера
На следующем рисунке показана активация типов при активации надстройки. Также здесь показана передача объектов в основное приложение, например результатов вычисления или коллекции объектов. Это самый обычный сценарий.
Путь активации из надстройки в основное приложение
Путь активации конвейера возникает следующим образом:
Основное приложение активирует надстройку с помощью метода Activate.
Сборки надстройки, представления надстройки, адаптера на стороне надстройки и контракта загружаются в домен приложения надстройки.
Создается экземпляр адаптера на стороне надстройки с помощью представления надстройки (с помощью класса, указанного атрибутом AddInBaseAttribute) в качестве конструктора. Адаптер на стороне надстройки наследует из контракта.
Адаптер надстройки, который типизируется как контракт, передается через (необязательные) границы изоляции в конструктор адаптера основного приложения.
Сборки представления основного приложения, относящегося к надстройке, адаптера на стороне основного приложения и контракта загружаются в домен приложения основного приложения.
Экземпляр адаптера на стороне основного приложения создается с помощью контракта в качестве конструктора. Адаптер на стороне основного приложения наследует из представления основного приложения, относящегося к надстройке.
Основное приложение имеет надстройку, которая типизируется как представление основного приложения, относящееся к надстройке, и может продолжить вызывать эти методы.
Пошаговые руководства
Здесь приводятся три раздела с пошаговыми руководствами, в которых описано, как создавать конвейеры в Visual Studio:
Пошаговое руководство. Создание расширяемого приложения
Описание надстройки калькулятора, которая выполняет сложение, вычитание, умножение и деление для основного приложения.
Пошаговое руководство. Включение обратной совместимости при изменении основного приложения
Описание надстройки калькулятора, которая улучшает возможности вычисления, а также способа обеспечения совместимости с первой надстройкой калькулятора.
Пошаговое руководство. Передача коллекций между основными приложениями и надстройками
Описание передачи коллекций данных через конвейер в сценарии с книжным магазином.