我可以使用面向方面的方法访问自定义方法属性吗?

本文关键字:自定义方法 访问 属性 方法 可以使 方面 我可以 | 更新日期: 2023-09-27 17:52:48

例如:我有一个类似于下面的自定义属性类:

[System.AttributeUsage(System.AttributeTargets.Method)
]
public class Yeah: System.Attribute
{
    public double whatever = 0.0;
}

现在我用它来装饰一些方法,像这样:

[Yeah(whatever = 2.0)]
void SampleMethod
{
    // implementation
}

是否可以通过方面注入代码来访问yeah -属性?我更喜欢面向AOP的postsharp框架,但我也喜欢其他任何解决方案,因为我认为postsharp中有这样一个特性,但只有专业版(这里提到:postsharp Blog)

我可以使用面向方面的方法访问自定义方法属性吗?

看看NConcern . net AOP框架。这是我积极参与的一个新的开源项目。

//define aspect to log method call
public class Logging : IAspect
{
    //define method name console log with additional whatever information if defined.
    public IEnumerable<IAdvice> Advise(MethodInfo method)
    {
        //get year attribute
        var year = method.GetCustomAttributes(typeof(YearAttribute)).Cast<YearAttribute>().FirstOrDefault();
        if (year == null)
        {
            yield return Advice.Basic.After(() => Console.WriteLine(methode.Name));
        }
        else //Year attribute is defined, we can add whatever information to log.
        {
            var whatever = year.whatever;
            yield return Advice.Basic.After(() => Console.WriteLine("{0}/whatever={1}", method.Name, whatever));
        }
    }
}
public class A
{
    [Year(whatever = 2.0)]
    public void SampleMethod()
    {
    }
}
//Attach logging to A class.
Aspect.Weave<Logging>(method => method.ReflectedType == typeof(A));
//Call sample method
new A().SampleMethod();
//console : SampleMethod/whatever=2.0

我的日志记录方面只是在调用方法时写下方法名。它包含定义时的任何信息。