Postsharp - добавление OnMethodBoundaryAspect к абстрактному методу - аспект не запускается - PullRequest
2 голосов
/ 24 февраля 2012

Я пытаюсь реализовать аспект 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 Ответ

2 голосов
/ 24 февраля 2012

Обновленный ответ: Неважно, где что-то находится, если на оба проекта есть ссылка на 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
...