我们正在Caliburn.Micro上开始一个新的Silverlight项目。我们需要通过Google Analytics记录每个用户互动。每次发送任何ActionMessage时,有没有办法执行一些代码?
答案 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
,它会为您提供有关操作的信息。
也许做一些比抛出异常更有用的东西:)