Добрый день читатели, я в этой статье не буду заострять внимание на теории дополнений. Все и так знают что такое плагины. Перейдем сразу к практике.
Мы создадим простое Windows Forms приложение, для которого мы потом сделаем дополнение. Дополнение будет иметь свои формы Windows Forms.
1. Создадим новое решение, назовем его AddInTest
2. Переименум проект в HostApplication
4. Начнем с того, что мы обозначим интерфейс для всех дополнений. Каждое дополнение для нашего приложения должно будет поддерживать этот интерфейс.
5. Откроем проект Contract.
6. Удалим из этого проекта класс Class1.
7. Добавим в проект интерфейс, назовем его IExecutionContract
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.
40. Создадим новую папку AddIns в папке Output. А в ней ещё одну папку ShowFormAddIn. Откроем проект ShowFormAddIn и назначим в его свойствах в качестве выходной папки путь к новой папке AddIns\ShowFormAddIn.
41. Создадим новую папку AddInSideAdapters в папке Output. Откроем проект AddInSideAdapter и назначим в его свойствах в качестве выходной папки путь к новой папке AddInSideAdapters.
42. Cоздадим новую папку AddInView в папке Output. Откроем проект AddInView и назначим в его свойствах в качестве выходной папки путь к новой папке AddInView.
43. Cоздадим новую папку Contracts в папке Output. Откроем проект Contract и назначим в его свойствах в качестве выходной папки путь к новой папке Contracts.
44. Cоздадим новую папку HostSideAdapters в папке Output. Откроем проект HostSideAdapter и назначим в его свойствах в качестве выходной папки путь к новой папке HostSideAdapters.
45. Перейдем к проекту HostApplication.
46. Добавим ссылки на System.AddIn, HostView.
47. Если вы ещё не добавили на форму ListBox и Button - то добавляйте.
48. Код при загрузке формы будет следующий:
49. Код для активации и выполнения дополнения будет такой:
50. Давайте протестируем что у нас получилось. Нажимаем F5 и ждем.
51. Запустится форма:
52. Выберем элемент ShowFormAddIn и нажмем кнопку.
53. Должно будет отобразиться окно со свойствами дополнения.
54. И форма, которая находится внутри дополнения.
Мы создадим простое Windows Forms приложение, для которого мы потом сделаем дополнение. Дополнение будет иметь свои формы Windows Forms.
1. Создадим новое решение, назовем его AddInTest
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.
40. Создадим новую папку AddIns в папке Output. А в ней ещё одну папку ShowFormAddIn. Откроем проект ShowFormAddIn и назначим в его свойствах в качестве выходной папки путь к новой папке AddIns\ShowFormAddIn.
41. Создадим новую папку AddInSideAdapters в папке Output. Откроем проект AddInSideAdapter и назначим в его свойствах в качестве выходной папки путь к новой папке AddInSideAdapters.
42. Cоздадим новую папку AddInView в папке Output. Откроем проект AddInView и назначим в его свойствах в качестве выходной папки путь к новой папке AddInView.
43. Cоздадим новую папку Contracts в папке Output. Откроем проект Contract и назначим в его свойствах в качестве выходной папки путь к новой папке Contracts.
44. Cоздадим новую папку HostSideAdapters в папке Output. Откроем проект HostSideAdapter и назначим в его свойствах в качестве выходной папки путь к новой папке HostSideAdapters.
45. Перейдем к проекту HostApplication.
46. Добавим ссылки на System.AddIn, HostView.
47. Если вы ещё не добавили на форму ListBox и Button - то добавляйте.
48. Код при загрузке формы будет следующий:
49. Код для активации и выполнения дополнения будет такой:
50. Давайте протестируем что у нас получилось. Нажимаем F5 и ждем.
51. Запустится форма:
53. Должно будет отобразиться окно со свойствами дополнения.
54. И форма, которая находится внутри дополнения.
55. В итоге метод ShowForm выполняется в другом потоке не блокируя главное приложение. На этом раскланиваюсь. Статья закончена. Исходники вы можете скачать по ссылке.
А как теперь из главной формы закрыть форму плагина?
ОтветитьУдалить