Добрый день читатели, я в этой статье не буду заострять внимание на теории дополнений. Все и так знают что такое плагины. Перейдем сразу к практике.
Мы создадим простое Windows Forms приложение, для которого мы потом сделаем дополнение. Дополнение будет иметь свои формы Windows Forms.
1. Создадим новое решение, назовем его AddInTest
2. Переименум проект в HostApplication
3. Добавим библиотке несколько библиотек классов, назовем их:
AddInSideAdapter, AddInView, Contract, HostSideAdapter, HostView.
Должно получиться как на картинке ниже:
4. Начнем с того, что мы обозначим интерфейс для всех дополнений. Каждое дополнение для нашего приложения должно будет поддерживать этот интерфейс.
5. Откроем проект Contract.
6. Удалим из этого проекта класс Class1.
7. Добавим в проект интерфейс, назовем его
IExecutionContract
8. Добавим ссылку на сборку System.AddIn.Contract
9. Добавим в блок using System.AddIn.Pipeline и using System.AddIn.Contract;
10. Пометим наш интерфейс атрибутом [AddInContract]
11. Для простоты примера, опишем в интерфейсе всего 1 метод ShowForm.
12. Наш интерфейс должен наследовать интерфейс IContract. Этот интерфейс находится в сборке System.AddIn.Contract;
12. На этом наш интерфейс готов. Перейдем к проекту AddInView.
13. Переименуем класс Class1 в ShowFormAddInView.
14. Добавим ссылку на сборку System.AddIn
15. Добавим в блок using System.AddIn.Pipeline
16. Пометим наш абстрактный класс атрибутом
[AddInBase]
17. Создадим абстрактный метод ShowForm.
18. С этим пока всё. Перейдем к проекту
AddInSideAdapter.
19. Переименуем класс
Class1 в
ShowFormViewToContractAdapter20. Добавим ссылку на сборку
System.AddIn, System.AddIn.Contract, Contract и AddInView
21. Добавим в блок
using System.AddIn.Pipeline
22. Пометим наш абстрактный класс атрибутом [
AddInAdapter]
23. Обозначим, что наш класс
ShowFormViewToContractAdapter наследует интерфейсы
ContractBase и Contract.IExecutionContract.
24. Далее опишем класс как показано ниже:
25. Добавим новую библиотеку классов, назовем её ShowFormAddIn
26. Добавим ссылку на сборку System.AddIn
27. Переименуем Class1 в ShowFormAddIn.
28. Добавим в этот проект форму Form1.
29. Все остальное напишем как на рисунке ниже.
30. Откроем проект HostView.
31. Переименуем класс Class1 в ShowFormHostView.
32. Напишем следующий код:
33. Откроем проект HostSideAdapter. Добавим ссылку на System.AddIn, System.AddIn.Contract, HostView, Contract.
34. Переименуем класс Class1 в ShowFormContractToViewHostAdapter.
35. Код этого класса:
36. Теперь необходимо открыть по-очереди каждый проект, развернуть у него группу Reference и назначить нашим сборкам признак CopyLocal = false. Единственным исключением должен являться проект самого приложения. Но на данном этапе мы никакие ссылки на сборки в него не добавляли.
37. Выберем всё решение (Solution), нажмем на нем правой кнопкой мыши и выберем очистить решение (Clean Solution).
38. Теперь настроим папки. Для использования дополнений и плагинов нам нужно соблюдать требование к структуре папок. Для начала развернем проект HostApplication. Создадим в ней новую папку, назовем её Output.
39. Откроем свойства проекта HostApplication. На вкладке Debug укажем путь (Output path) к новой папке Output.