Postsharp - 将OnMethodBoundaryAspect添加到抽象方法 - Aspect not Firing

时间:2012-02-24 16:02:53

标签: c#-4.0 aop postsharp

我正在尝试在抽象类中的抽象方法上实现OnMethodBoundary方面,以便从该类继承的所有类型都将自动应用方面。没有编译错误或警告,但OnEntry方法不会触发。注意:如果我将方面应用于非抽象方法,一切正常

这是方面的例子:


    [Serializable]
    [MulticastAttributeUsage(MulticastTargets.Method, Inheritance = MulticastInheritance.Multicast)]
    public sealed class DoSomethingAttribute : OnMethodBoundaryAspect
    {
        public override void OnEntry(MethodExecutionArgs args)
        {
            //Do work
        }
    }

//这是抽象类

public abstract class Job
    {
        //...
        [DoSomething]
        public abstract void Run();
    }

1 个答案:

答案 0 :(得分:2)

更新回答:无论何处都没关系,只要两个项目都引用了Postsharp,那么你就可以了。

它运作得很好。您使用的是哪个版本的PostSharp?

class Program
{
    static void Main(string[] args)
    {
        Job1 j = new Job1();
        j.Run();
        Console.ReadKey();
    }
}

[Serializable]
[MulticastAttributeUsage(MulticastTargets.Method, Inheritance = MulticastInheritance.Multicast)]
public sealed class DoSomethingAttribute : OnMethodBoundaryAspect
{
    public override void OnEntry(MethodExecutionArgs args)
    {
        Console.WriteLine("OnEntry");
    }
}

public abstract class Job
{
    //...
    [DoSomething]
    public abstract void Run();
}

public class Job1 : Job
{

    public override void Run()
    {
        Console.WriteLine("Run method");
    }
}

<强>结果:

OnEntry 
Run method