Содержание
- 2. Причины создания плагинов - Чтобы расширить функциональные возможности приложения без необходимости перекомпиляции или повторного распространения его
- 3. Этапы создания плагина Создание подключаемой инфраструктуры Создание подключаемого модуля Создание экземпляров подключаемых модулей и их инициализация
- 4. Plugin архитектура
- 5. Применение рефлексии для создания плагинов В .NET написание плагинов решается с помощью рефлексии (reflection). Рефлексия позволяет
- 6. Класс Type Основной класс для динамического получения информации о классах, интерфейсах, их полях, методах и перечислениях
- 7. Пример
- 8. Создание экземпляров типов По объекту Type можно не только определять параметры типа, но и создавать его
- 9. Загрузка объекта Имя сборки (MyAsm.dll будет MyAsm). LoadFrom напрямую загружает сборку из файла, путь к которому
- 10. Использование интерфейсов При создании плагинов обычно используются интерфейсы, определяющие методы и свойства, которые должны реализовываться плагином.
- 11. Вызов методов Обычно методы вызываются с помощью метода InvokeMember класса Type. Процесс вызова метода состоит из
- 12. Разработка плагинов Для демонстрации применения рефлексии при создании плагинов предлагается тестовое приложение, состоящее из 4 проектов.
- 13. Проект Interface Проект Interface содержит только определения двух интерфейсов. Приложение, которое подключает плагины, должно реализовывать интерфейс
- 14. Интерфейс для плагинов IPlugin содержит объявления трех свойств и одного метода для преобразования изображения. Свойства используются
- 15. Основное приложение Приложение MainApp, к которому мы будем подключать плагины, это простое windows-forms приложение для отображения
- 16. Метод FindPlugins В конструкторе формы вызывается метод FindPlugins, который находит плагины в папке с приложением и
- 17. Реализация FindPlugins() //Hashtable plugins = new Hashtable(); void FindPlugins() { string folder = System.AppDomain.CurrentDomain.BaseDirectory; string[] files
- 18. Создание меню После того, как все плагины найдены, создаем для них в функции CreatePluginsMenu пункты меню.
- 19. CreatePluginsMenu() void CreatePluginsMenu() { // создаем обработчик для комманд меню для плагинов EventHandler handler = new
- 20. Создание плагина Для создания плагинов создаем новый проект ClassLibrary, добавляем ссылку на сборку Interface и реализуем
- 21. Properties
- 22. ReverseTransform public class ReverseTransform : Interface.IPlugin { public string Name { get { return "Переворот изображения";
- 23. RandomTransform /// Плагин для вставки случайных точек в рисунок. public class RandomTransform : Interface.IPlugin { public
- 24. Загрузка изображения
- 25. Меню
- 26. Поворот изображения
- 27. Случайная трансформация
- 28. Ускорение работы с изображениями Локирование данных Вычисление размера массива - Копирование данных в массив - Работа
- 29. Локирование данных Rectangle rect = new Rectangle(0, 0, bmp.Width, bmp.Height); System.Drawing.Imaging. BitmapData bmpData = bmp.LockBits(rect,System.Drawing.Imaging.ImageLockMode.ReadWrite, bmp.PixelFormat);
- 30. Вычисление размера массива // Get the address of the first line. IntPtr ptr = bmpData.Scan0; //
- 31. Копирование данных в массив // Copy the RGB values into the array. System.Runtime.InteropServices.Marshal.Copy(ptr, rgbValues, 0, bytes);
- 32. Возвращение данных в Bitmap System.Runtime.InteropServices.Marshal.Copy(rgbValues, 0, ptr, bytes);
- 34. Скачать презентацию