SCSF/CAB программно добавляет CommandHandler

Есть ли способ сделать это:

[CommandHandler("ACommand")]
public void DoACommand(object sender, EventArgs e)
{
    //DoSomething
}

программно?

Я не хочу использовать атрибут, так как "ACommand" в этом случае изменится, так как это общая реализация в базовом классе. Спасибо Ян

2 ответа

Решение

Когда я начал разрабатывать с помощью SCSF, я провел небольшое исследование в отношении команд / событий, и пока не нашел способа сделать это. Было бы весьма полезно зарегистрировать все ваши обработчики команд внутри метода, который запускается при загрузке WorkItem, а не разбрасывать их по всему приложению с помощью атрибутов.

Единственное, что я могу предложить в вашем случае, это использовать статический класс, который содержит все имена ваших командных обработчиков в качестве констант, таких как [CommandHandler(CommandNames.CreateEmployeeCommand)]. Этот подход дает пару преимуществ: 1. Если имя вашей команды изменяется, вам нужно только изменить его в статическом классе и 2. вы можете создать базовый класс CommandNames (это делается для вас, когда вы используете SCSF), который может быть унаследован отдельным классом CommandNames модуля, позволяющим вам иметь глобальные команды и специфичные для модуля команды.

Я хотел бы знать, действительно ли вы нашли способ добавить эту функцию в свое решение, поскольку это было бы весьма полезно.

Вы можете использовать глобальную коллекцию команд (доступную через любой экземпляр рабочего элемента), выбрать свою команду и зарегистрировать обработчик события для события ExeceuteAction.

Пример (VB-синтаксис):

AddHandler workItem.Commands("ACommand").ExecuteAction, AddressOf DoACommand
RemoveHandlerHandler workItem.Commands("ACommand").ExecuteAction, AddressOf DoACommand
Другие вопросы по тегам