Добрый день!
При реализации событийной модели в своей стратегии столкнулся с невозможностью получить объект, инициализировавшее событие, в его обработчике. На моем примере, это выглядит так у меня по определенным условиям генерятся заявки, и мне нужно при их исполнении произвести некоторые расчеты 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>,с передачей в него ссылки на исполнившуюся заявку.
コメント (8)
ログイン または アカウントを作成, コメントを残すにはログインまたは新規登録してください
Спасибо большое. И как пожелание, неплохо было бы добавить в документацию такую информацию, а то не ясно какие формы обработчиков предусмотрены для стандартных событий.
Вы можете сами внести изменения в документацию.
А как? Для этого нужен доступ к файлам документации и как минимум к сигнатурам реализованных обработчиков. А так, я двумя руками ЗА.
Сегодня переправил правила, и теперь появлась generic версия StrategyRule (зальем на днях на CodePlex). Обработчик в методе Do у него сможет принимать только тот тип, что указан в StrategyRule. Поэтому неправильная сигнатура будет определяться уже на этапе компиляции. Собственно, так можно будет и увидеть, что может принимать Do.
Будет великолепно если опишите этот момент. Будет еще великолепнее, если опишите подробнее, как создавать свои правила и как их использовать. Жаловались на скудное описание. В чем-то согласен.
Залили.
Я зарегистрировался на codeplex под ником avkar. Добавьте, пожалуйста, меня в группу.
Мы регистрируем только помощников.