【问题标题】:Postsharp - Adding OnMethodBoundaryAspect to abstract Method - Aspect Not FiringPostsharp - 将 OnMethodBoundaryAspect 添加到抽象方法 - 方面未触发
【发布时间】:2012-02-24 16:02:52
【问题描述】:

我正在尝试在抽象类中的抽象方法上实现 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();
    }

【问题讨论】:

    标签: c#-4.0 aop postsharp


    【解决方案1】:

    更新答案:任何东西在哪里都没有关系,只要两个项目都引用了 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
    

    【讨论】:

    • 感谢您的回复。我使用的是 2.1.6.4 版本。
    • 好的,问题是我的实例类 (Job1) 存在于不同的程序集中。一个程序集中的控制台应用程序和 Job1、抽象类和另一个程序集中的方面。关于我如何解决这个问题的任何想法? (我无法移动代码,因为出于特定原因它在不同的程序集中)
    • @Marcus 任何东西在哪里都没有关系,只要两个项目都引用了 Postsharp 就可以了。
    • 2ILovePaperTowels。谢谢,这就是问题所在。我没有在我的第二个程序集中引用 PostSharp。我想会有一些编译时检查这些类型的错误。你能把它放在答案而不是评论中,这样我就可以选择它作为“答案”。 :)
    • @Marcus 很高兴你能成功。我已更新答案以包含我的评论。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-16
    • 1970-01-01
    • 2017-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多