c#-4.0 - Postsharp - 将 OnMethodBoundaryAspect 添加到抽象方法 - 方面未触发

标签 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();
    }

最佳答案

更新的答案:任何东西在哪里并不重要,只要两个项目都引用了 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

关于c#-4.0 - Postsharp - 将 OnMethodBoundaryAspect 添加到抽象方法 - 方面未触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9433934/

相关文章:

c# - 通用方法,是否可以返回 StreamReader 实例?

c# - 在类级别定义的 private const 然后在属性上使用,为什么会编译?

c# - 为什么在尝试调用采用动态参数的基本构造函数/方法时会出现此编译错误?

c# - 您能否将扩展方法的范围限制为具有特定属性的类?

c# - MethodInterceptionAspect 的替代方案

dependency-injection - 如何使用依赖注入(inject)从 postsharp 方面解决日志依赖关系

c#-4.0 - C#批量插入SQLBulkCopy-如果存在则更新

java - Spring aop 拦截来自同一服务类的调用

java - 同一连接点上有多个 @Around AspectJ

java - LOG4j Spring AOP