我们在Caliburn.Micro上开始了一个新的Silverlight项目。我们需要通过谷歌分析记录每个用户的互动。有没有办法在每次发送任何ActionMessage时都执行一些代码?
发布于 2011-03-12 00:19:28
幸运的是,这很容易。将ActionMessage.InvokeAction替换为您自己的方法,该方法执行日志记录,然后调用原始方法。您需要在Bootstrapper的Configure override中执行此操作。您的代码将如下所示:
var originalInvoke = ActionMessage.InvokeAction
ActionMessage.InvokeAction = context => {
//do logging here using the context
originalInvoke(context);
}非那样做不行。从上下文变量中,您可以获得触发调用的MethodInfo、标记视图模型、视图、EventArgs和源元素。
发布于 2011-03-12 00:17:33
我自己还没有尝试过,但是ActionMessage有一个InvokeAction公共委托,所以你可以订阅这个调用列表,也许在你的引导程序的Configure方法中:
ActionMessage.InvokeAction +=
c => { throw new Exception(string.Format("Method '{0}' invoked", c.Method.Name)); };您将收到一个ActionExecutionContext,它将为您提供有关该操作的信息。
也许做一些比抛出异常更有用的事情:)
https://stackoverflow.com/questions/5274984
复制相似问题