Как разрешить плагинам открывать специфичные для плагина меню, добавлять записи формы в настройки приложения ...? - PullRequest
1 голос
/ 19 июня 2010

при разработке приложения, поддерживающего плагины, мне интересно, каков наилучший подход, позволяющий плагинам создавать свои собственные пункты меню в интерфейсе, добавлять опции меню в существующие меню, добавлять определенные опции в диалог конфигурации приложения, такого рода вещи, и как справиться с сохранением этих изменений? Если плагин имеет сведения о параметрах, которые он добавил в форму, как он должен обрабатывать сохранение этих измененных параметров?

Я полагаю, что было бы лучше подходить к раскрытию универсальных методов, таких как GetMenuOptions () или GetConfigurationOptions (), что-то похожее, так что хост-приложение фактически манипулирует этими вещами вместо передачи объекта menustrip или объекта формы конфигурации для плагина для него модифицировать? Я на правильном пути, в плане дизайна? Есть ли какой-то общий шаблон для этого?

Платформа / язык: .net / c #

Спасибо!

Ответы [ 2 ]

1 голос
/ 21 июня 2010

Опция 1: репозиторий записей центрального меню

  • Плагины регистрируют свои ссылки в центральной системе, которую используют все меню.
  • Репозитарием может быть низко-технологический файл конфигурации или высокотехнологичная база данных, которую пользователи могут настроить в разделе администратора.

Плюсы

  • все данные меню хранятся в одном центральном месте, которым легко управлять
  • параметры меню можно кэшировать и использовать без запуска плагина (быстрее)
  • eaiser для обеспечения безопасности (какэто фактически статические данные).

Вариант 2: Определить по атрибуту

  • Определить один или несколько атрибутов в худойобщая сборка (под худой я имею ввиду несколько / никаких зависимостей);плагины определяют параметры меню с помощью этих атрибутов.
  • Используйте отражение, чтобы вывести параметры - либо во время выполнения, каждый раз, либо в кэш при запуске приложения.
  • Возможно, вы также можете (черезопределяемые вами атрибуты) определяют профили ролей пользователей, к которым подключаемые модули могут подключаться для управления доступом к параметрам меню, таким как администратор / обычный / прошедший проверку подлинности / не прошедший проверку подлинности пользователи.

Вариант 3: подключаемые модули придерживаются интерфейса, предоставляют данные меню по запросу

  • Центральный репозиторий пунктов меню является виртуальным и существует только во время выполнения: при вызове меню он имеетбыть построенным на логике.Это гибкий, но сложный и, возможно, не очень эффективный.
  • Логический вызов для разговора с каждым плагином, независимо от того, есть ли у этого плагина какие-либо пункты меню для создаваемого меню.Да, вы могли бы сделать это один раз и кэшировать его - но вам будет лучше просто выбрать вариант 1.
0 голосов
/ 19 июня 2010

Общий подход заключается в использовании комбинации глаголов и услуг.Как часть вашей архитектуры плагинов, вы можете предоставить интерфейс, что-то вроде IInterfaceService, посредством которого вы можете использовать несколько экземпляров и использовать их для расширения вашего интерфейса, например

public interface IInterfaceService
{
    IVerb[] GetVerbs(string category);
}


public interface IVerb
{
    string Category { get; }
    string Name { get; }


    void Action();
}

Это, очевидно, довольно упрощенно, вам нужновыделять все, что вам нужно.Если бы вы основывали большинство точек расширения на чем-то похожем, вы могли бы довольно легко разрешить вставку командных глаголов и т. Д.

Надеюсь, что вы начали.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...