SCSF / CAB программно добавляет CommandHandler - PullRequest
0 голосов
/ 21 сентября 2011

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

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

программно?

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

Ответы [ 2 ]

1 голос
/ 06 сентября 2012

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

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

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

0 голосов
/ 15 января 2015

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

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

AddHandler workItem.Commands("ACommand").ExecuteAction, AddressOf DoACommand
RemoveHandlerHandler workItem.Commands("ACommand").ExecuteAction, AddressOf DoACommand
...