====== Создание первого модуля ======
Создайте и настройте новый [[developers:tutorial:project|проект]] Visual Studio.
Для создания и подключения модуля к программному комплексу [[http://www.topomatic.ru|Топоматик Робур]] необходимо создать следующие элементы:
* Класс реализующий функциональность модуля
* Класс отвечающий за инициализацию модуля
* Файл для подключения к программному комплексу.
Начнем с создания класса, реализующего функциональность модуля. Это должен быть наследник от [[developers:references:topomatic.applicationplatform.plugins.plugininitializator|PluginInitializator]]. Создайте новый класс компонента и назовите его "Module".
{{ :developers:tutorial:module:add_component.png?direct&400 |Рисунок 10. Создание компонента}}
Откройте окно редактирования кода компонента.
{{ :developers:tutorial:module:goto_code.png?direct&400 |Рисунок 11. Перейти к коду компонента}}
Измените код класса, сделайте его наследником от [[developers:references:topomatic.applicationplatform.plugins.plugininitializator|PluginInitializator]]. Также можно убрать его из общей области видимости.
partial class Module : Topomatic.ApplicationPlatform.Plugins.PluginInitializator
{
//тут будут объявлены функции, реализующие нужный нам функционал
}
Теперь создадим класс, отвечающий за инициализацию модуля. Этот класс должен быть наследником от абстрактного класса [[developers:references:topomatic.applicationplatform.plugins.pluginhostinitializator|PluginHostInitializator]] и находится в общей области видимости. У него необходимо реализовать абстрактную функцию GetTypes() возвращающую список типов модулей. В нашем случае мы вернем только один тип - тип нашего класса Module.
Создайте новый класс и назовите его "ModulePluginHost". Наследуйте класс от [[developers:references:topomatic.applicationplatform.plugins.pluginhostinitializator|PluginHostInitializator]] и реализуйте функции как описано выше.
public class ModulePluginHost : Topomatic.ApplicationPlatform.Plugins.PluginHostInitializator
{
//тут мы возвращаем типы всех модулей, которые хотим подключить, в нашем примере только один тип
protected override Type[] GetTypes()
{
return new Type[] { typeof(Module) };
}
}
Для подключения нашей библиотеки к программному комплексу нам необходим файл "Имя нашей библиотеки".plugin.
Здесь и далее замените **"Имя нашей библиотеки"**, на имя вашего проекта, в примере это **tutorial1**
Это [[developers:references:core.plugin|файл]], который содержит инструкции для программного комплекса, позволяющие загрузить и подключить модули, содержащиеся в нашей сборке.
Создайте новый файл и назовите его "Имя нашей библиотеки".plugin.
Для этого выберите в контекстном меню проекта "Создать элемент...".
{{ :developers:tutorial:module:add_addin.png?direct&400 |Рисунок 12. Создание элемента}}
В диалоге добавления нового элемента выберите текстовый файл.
{{ :developers:tutorial:module:add_addin2.png?direct&400 |Рисунок 13. Выбор текстового файла}}
Выберите созданный файл в структуре проекта, и назначьте свойству "Копировать в выходной каталог" значение "Всегда копировать", чтобы всегда копировать этот файл в каталог куда Вы собираете Вашу библиотеку.
{{ :developers:tutorial:module:always_copy.png?direct&200 |Рисунок 14. Копирование в выходной каталог}}
Заполните созданный файл, как показано ниже.
{
"assemblies": {
"Имя нашей библиотеки": {
"assembly": "Имя нашей библиотеки.dll, Имя нашей библиотеки.ModulePluginHost"
}
}
}
Элемент ''assemblies'' определяет какие сборки будут подключены к программному комплексу и может содержать один или несколько элементов ''assembly''. В нашем случае этот элемент один и представляет из себя строку, содержащую, через запятую имя сборки и полное имя класса, наследника от [[developers:references:topomatic.applicationplatform.plugins.pluginhostinitializator|PluginHostInitializator]], включая его пространство имен.
Выполнив указанные выше действия и скомпилировав проект мы получим полностью работоспособный плагин, подключающий наш модуль к программному комплексу Топоматик Робур.
Сейчас наш модуль полностью пустой. Давайте добавим к нему немного функциональности. Для этого вернемся к коду класса "ModulePluginHost" и перекроем в нём метод [[developers:references:topomatic.applicationplatform.plugins.plugininitializator.initialize|Initialize]] как показано ниже.
//этот метод будет вызван в момент старта программного комплекса
//при первой инициализации вашего модуля
//после этого модуль будет закэширован
public override void Initialize(PluginFactory factory)
{
base.Initialize(factory);
//вызов этого метода покажет стандартный диалог с сообщением
MessageDlg.Show("Привет Робур");
}
Этот метод будет вызван при старте программного комплекса и мы покажем там сообщение, в котором будет написано "Привет Робур".
Сообщение будет вызвано при старте в момент первой инициализации модуля, потом он будет сохранен и инициализация модуля будет вызываться по требованию. Если необходимо сбросить информацию о сохраненных модулях, можно воспользоваться командой "clearcache" доступной в командной строке.
Для того чтобы использовать методы статического класса [[developers:references:topomatic.controls.dialogs.messagedlg|MessageDlg]] необходимо добавить нужные пространства имен в секцию using. Visual Studio позволяет легко сделать это, нажав правой клавишей на имени класса и выбрав добавление директивы using.
Теперь мы можем запустить наш проект. Он автоматически соберет нашу сборку в каталог с программным комплексом, скопирует туда же файл plugin и запустит исполняемый файл программного комплекса, при старте которого мы увидим наше сообщение.
{{ :developers:tutorial:module:hello.png?direct&400 |Рисунок 15. Сообщение - Привет Робур}}
[[developers:tutorial:tutorialcode|Исходный код]] примера расположен в проекте **"tutorial1"**.