Caliburn.Micro: регистрация каждого ActionMessage? - PullRequest
1 голос
/ 11 марта 2011

Мы запускаем новый проект Silverlight на Caliburn.Micro. Нам нужно регистрировать каждое взаимодействие с пользователем через Google Analytics. Можно ли как-нибудь выполнить код при каждой отправке сообщения ActionMessage?

Ответы [ 2 ]

3 голосов
/ 11 марта 2011

К счастью, это довольно просто.Замените ActionMessage.InvokeAction на свой собственный метод, который ведет журнал, а затем вызывает оригинал.Вы захотите сделать это в переопределении Configure Bootstrapper.Ваш код будет выглядеть примерно так:

var originalInvoke = ActionMessage.InvokeAction
ActionMessage.InvokeAction = context => {
    //do logging here using the context
    originalInvoke(context);
}

Это все, что нужно сделать.Из контекстной переменной вы можете получить MethodInfo, модель представления Taget, View, EventArgs и элемент Source, который инициировал вызов.

1 голос
/ 11 марта 2011

Я сам не пробовал, но у ActionMessage есть InvokeAction открытый делегат, так что вы можете подписаться на этот список вызовов, возможно, в методе Configure вашего загрузчика:

ActionMessage.InvokeAction +=
  c => { throw new Exception(string.Format("Method '{0}' invoked", c.Method.Name)); };

Вы получите ActionExecutionContext, который даст вам информацию о действии.

Возможно, сделать что-то более полезное, чем генерировать исключение:)

...