Проект "MonoDevelop Add-in для PascalABC.NET"

Материал из Вики проекта PascalABC.NET
Перейти к навигацииПерейти к поиску

Mono.Addins Reference Manual

Введение

Mono.Addins является основой для создания расширяемых приложений, а также для создания библиотек, расширяющих эти приложения(аналог "плагинов").

Эта структура вытекает из использования MonoDevelop, путем добавления в MonoDevelop расширяемых приложений (extensible applications), хотя MonoDevelop был полностью переписан и усовершенствован, существует множество способов сделать его более общим и простым в использовании. Добавление в программу MonoDevelop "плагинов" (Mono.Addins) реализованно намного удобней, чем по сравнению с инструментом SharpDevelop, который реализован на основе идей от Eclipse add-in engine (добавления "плагинов" в системе Eclipse).

Mono.Addins был разработан, чтобы быть полезным для широкого спектра приложений: от простых приложений с малыми потребностями расширения(дополнения к коду) до сложных приложений (таких как сам MonoDevelop), которые нуждаются в поддержке: в больших дополнениях в структурах программы.

Этот документ включает в себя подробное описание всех функций, которые предоставляет Mono.Addins. Если у Вас есть вопросы или предложения о Mono.Addins, подпишитесь на рассылку разработчиков Mono.Addins (http://groups.google.com/group/mono-addins).

Основы Mono.Addins

Модель расширения Mono.Addins базируется на четырех концепциях:

Add-in host: приложение или библиотека, которые могут быть расширены с помощью add-ins. Расширение возможностей определяется посредством точек расширения(extension points).

Extension point: пространство, гед add-ins могут регистрировать extension nodes(узлы расширекния) для расширения функциональности. Extension points определяются путем использования extension paths(путей расширения).

Extension node: Атрибут оформления элемента, описывающий расширения. Extension nodes(узлы расширения) типизированные. extension points могут объявить, какие типы extension nodes они принимают.

Add-in: Набор файлов, которые регистрируют новые узлы в одной или нескольких точек расширения, определяются add-in hosts. Add-in может дополнять add-in host, и может реализовываться разными add-ins.

Mono.Addins определяется оделью описания Add-in, с использованием add-ins and add-in hosts для описания индормации расширения. Add-in может быть представлен с использованием XML манифеста(объявления), или с применением атрибутов и типов.

В результатте Mono.Addins записывается в виде API (выполняя Mono.Addins.dll) который встраивается при выполнении.

Для примера рассотрим базовое приложение Mono.Addins.

Простейший пример

Реализуем текстовый редактор к которому будем подключать наши add-ins. Рассмотрим диаграмму, на колторой отображена схема работы программы.

Файл:Example.jpg

Далее рассмотрим, как расширить возможности текстового редактора, используя возможности Mono.Addins.

Мы хотим разрешить add-ins выполнять последние изменения при запуске приложения.

Приложение текстового редактора состоит из 2-х сборок:

1)TextEditor.exe это само приложение.

2)TextEditorLib.dll определяет насколько дополнительных интерфейсов для приложения


Далее мы видим базовую структуру.

ICommand library (TextEditorLib.dll) [[code ( public interface ICommand { string Run (); } )]] public interface ICommand { string Run (); }

It's a very simple interface with just one method: Run. The editor will call this method to run the custom command.

Add-in host manifest (TextEditor.addin)

<Addin id="TextEditor" version="1.0" isroot="true">

<Runtime> <Import assembly="TextEditor.exe"/> <Import assembly="TextEditorLib.dll"/> </Runtime>

<ExtensionPoint path = "/TextEditor/StartupCommands"> <ExtensionNode name="Command" type="Mono.Addins.TypeExtensionNode"/> </ExtensionPoint> </Addin>The host manifest includes the following information:

The Addin element declares the host identifier and version. The isroot attribute specifies that the manifest belongs to an add-in host. The Runtime element declares the files that belong to the host. The ExtensionPoint element declares a new extension point. The path attribute specifies the location of the extension point in the extension tree. The ExtensionNode element specifies the type of node that the extension point accepts. In this case, the extension point will only allow nodes of type TypeExtensionNode, which will be identified in extensions using the name Command.