Caliburn.Micro:记录每个ActionMessage?

时间:2011-03-11 15:39:44

标签: silverlight google-analytics caliburn.micro

我们正在Caliburn.Micro上开始一个新的Silverlight项目。我们需要通过Google Analytics记录每个用户互动。每次发送任何ActionMessage时,有没有办法执行一些代码?

2 个答案:

答案 0 :(得分:3)

幸运的是,这很容易。用您自己的方法替换ActionMessage.InvokeAction,该方法执行日志记录,然后调用原始方法。您将需要在Bootstrapper的配置覆盖中执行此操作。您的代码看起来像这样:

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

这就是它的全部。从上下文变量中,您可以获得MethodInfo,Taget视图模型,View,EventArgs和触发调用的Source元素。

答案 1 :(得分:1)

我自己没有尝试过这个,但是ActionMessage有一个InvokeAction公共委托,所以你可以订阅那个调用列表,可能在你的bootstrapper的Configure方法中:

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

您将收到ActionExecutionContext,它会为您提供有关操作的信息。

也许做一些比抛出异常更有用的东西:)