我正在使用 PostSharp 拦截对我不拥有的对象的方法调用,但我的方面代码似乎没有被调用。 Silverlight 领域的文档似乎很松散,所以我很感激你们能提供的任何帮助:)

我有一个看起来像的属性:

public class LogAttribute : OnMethodInvocationAspect
{
    public override void OnInvocation(MethodInvocationEventArgs eventArgs)
    {
        // Logging code goes here...
    }
}

我的 AssemblyInfo 中的一个条目如下所示:
[assembly: Log(AttributeTargetAssemblies = "System.Windows", AttributeTargetTypes = "System.Windows.Controls.*")]

所以,我对你的问题是......我错过了什么?匹配属性目标下的方法调用似乎不起作用。

最佳答案

对于当前版本的 PostSharp,这是不可能的。
PostSharp 通过在 CLR 加载之前转换程序集来工作。现在,为了做到这一点,必须发生两件事:

  • 程序集必须即将加载到 CLR 中;你只有一次机会,你必须在这个时候出手。
  • 转换阶段完成后,您将无法进行任何其他修改。这意味着您不能在运行时修改程序集。

  • 最新版本,1.5 CTP 3, removes the first of these two limitations ,但真正有问题的是第二个版本。然而,这是 a heavily requested feature ,所以请睁大眼睛:

    运行时/第三方方面的问题
    作者还概述了如果允许在运行时修改会发生的一些问题:

    关于c# - 使用 PostSharp 拦截对 Silverlight 对象的调用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/97733/

    10-11 21:33