1

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

4

2 回答 2

3

幸运的是,这很容易。将 ActionMessage.InvokeAction 替换为您自己的方法,该方法进行记录,然后调用原始方法。您将希望在引导程序的配置覆盖中执行此操作。您的代码将如下所示:

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

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

于 2011-03-11T16:19:27.860 回答
1

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

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

您将收到一个ActionExecutionContext将为您提供有关该操作的信息的信息。

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

于 2011-03-11T16:17:33.010 回答