PostSharp OnMethodBoundaryAspect OnEntry не выполняется - PullRequest
7 голосов
/ 17 июня 2011

Я использую веб-приложение .NET 4.0 (не веб-сайт) и PostSharp 1.5. Я не могу получить метод переопределения OnEntry для выполнения с помощью базового класса OnMethodBoundaryAspect. Вот соответствующий код:

public sealed class MonitorAttribute : OnMethodBoundaryAspect {

    public string[] SomeValue { get; protected set; }         

    public MonitorAttribute (params string[] someValue){
        SomeValue = someValue;
    }

    public override void OnEntry(MethodExecutionEventArgs eventArgs){
        // do Something here
        base.OnEntry(eventArgs);
    }

}

public sealed class MyUsageClass : IMyUsageClass {

    [Monitor(new string[]{ 'Test' })
    public void SomeMethod {
        // Do something else in here
    }        

}

Я что-то упустил? Он никогда не попадает в метод OnEntry. Я также попытался заменить свои зависимости PostSharp.dll и PostSharp.Laos.dll новой версией 2.0. Если это имеет какое-либо значение, то MyUsageClass создается экземпляром StructureMap.

1 Ответ

2 голосов
/ 17 июня 2011

Да, для каждого разработчика должен быть установлен PostSharp. Если вы просто используете версию для начинающих, то все это бесплатно.

Отправка этого сообщения в ответ, чтобы показать вам код. Мой тестовый код

class Program
    {
        [Monitor]
        static void Main(string[] args)
        {

        }
    }

    [Serializable]
    public class MonitorAttribute : OnMethodBoundaryAspect
    {
        public override void OnEntry(MethodExecutionArgs args)
        {
            Console.WriteLine("OnEntry");
        }
    }

Код после компиляции

internal class Program
    {
        [CompilerGenerated, DebuggerNonUserCode]
        internal sealed class <>z__Aspects
        {
            internal static MethodBase m1 = MethodBase.GetMethodFromHandle(ldtoken(Main()));
            internal static readonly MonitorAttribute a0 = (MonitorAttribute)<>z__AspectsImplementationDetails.aspects1[0];
        }
        private static void Main(string[] args)
        {
            Program.<>z__Aspects.a0.OnEntry(null);
        }
    }
...