← Zurück

как получить объект события

Добрый день!

При реализации событийной модели в своей стратегии столкнулся с невозможностью получить объект, инициализировавшее событие, в его обработчике. На моем примере, это выглядит так у меня по определенным условиям генерятся заявки, и мне нужно при их исполнении произвести некоторые расчеты c объемом и ценой, для чего в моем обработчике MatchedOrder нужно получить ссылку на исполненную заявку. Событие вызывается так <mark> this .When(order.Matched()) .Do(MatchedOrder);</mark>

Как можно в обработчике MatchedOrder получить ссылку на исполненный ордер? Вроде бы есть возможность передать в обработчик объект, если реализовать его как

<mark>public StrategyRule Do<TArg>( Action<TArg> action )</mark>

, но метод позволяющий передать туда объект защищен

<mark>protected void Activate( Object value )</mark>

Хорошо было бы для стандартных событий реализовать Do<TArg>, например, для Matched() реализовать свой Do<Order>,с передачей в него ссылки на исполнившуюся заявку.

War dieses Thema hilfreich?

Thema teilen

Kommentare (8)

Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen

Mikhail Sukhov
Mikhail Sukhov
this
   .When(order.Matched())
   .Do<Order>(MatchedOrder);
avkar
avkar
avkar Autor

Спасибо большое. И как пожелание, неплохо было бы добавить в документацию такую информацию, а то не ясно какие формы обработчиков предусмотрены для стандартных событий.

Mikhail Sukhov
Mikhail Sukhov

avkar: Спасибо большое. И как пожелание, неплохо было бы добавить в документацию такую информацию, а то не ясно какие формы обработчиков предусмотрены для стандартных событий.

Вы можете сами внести изменения в документацию.

avkar
avkar Autor

А как? Для этого нужен доступ к файлам документации и как минимум к сигнатурам реализованных обработчиков. А так, я двумя руками ЗА.

Mikhail Sukhov
Mikhail Sukhov

avkar: А как? Для этого нужен доступ к файлам документации и как минимум к сигнатурам реализованных обработчиков. А так, я двумя руками ЗА.

  1. Сделать логин на CodePlex и сказать его.
  2. Скачать через TFS исходники, где в папке Documents находится документация.
  3. Установить Sandcastle + SHFB.
  4. Через SHFB отредактировать файлы доки.
  5. Залить ее на CodePlex.

Сегодня переправил правила, и теперь появлась generic версия StrategyRule (зальем на днях на CodePlex). Обработчик в методе Do у него сможет принимать только тот тип, что указан в StrategyRule. Поэтому неправильная сигнатура будет определяться уже на этапе компиляции. Собственно, так можно будет и увидеть, что может принимать Do.

Будет великолепно если опишите этот момент. Будет еще великолепнее, если опишите подробнее, как создавать свои правила и как их использовать. Жаловались на скудное описание. В чем-то согласен.

Mikhail Sukhov
Mikhail Sukhov

Mikhail Sukhov: Сегодня переправил правила, и теперь появлась generic версия StrategyRule (зальем на днях на CodePlex).

Залили.

avkar
avkar Autor

Я зарегистрировался на codeplex под ником avkar. Добавьте, пожалуйста, меня в группу.

Mikhail Sukhov
Mikhail Sukhov

avkar: Я зарегистрировался на codeplex под ником avkar. Добавьте, пожалуйста, меня в группу.

Мы регистрируем только помощников.