返回值的自定义属性,可以在C#中访问方法输入参数

时间:2017-02-10 18:58:40

标签: c# .net attributes aop custom-attributes

我试图利用自定义属性的AOP,我想实现一个自定义属性,它根据输入参数影响返回方法值。有一种方法可以为返回值定义属性:

[return: CustomAttribute]
public string Do(string param1)
{
    // do something
}

但是我无法找到在应用此属性时添加所需行为的方法。我想根据输入参数的值执行一些代码,在某些情况下甚至可以更改输出值。

2 个答案:

答案 0 :(得分:2)

C#不提供任何与AOP相关的语法。 [return: CustomAttribute]将元数据信息添加到返回类型。这根本不是你所期望的。为了利用AOP,您需要:

  • 使用专门设计用于允许AOP的外部库。这是nice list个这样的库。
  • 如果你正在使用容器,那么它可能支持AOP。例如,这里是a link与StructureMap AOP相关的文档。
  • 您可以尝试自己实现AOP功能,但这很难(特别是如果您关心性能)。

答案 1 :(得分:0)

这是一种做丑陋的方法,可以得到你的结果,但它很好......丑陋。

public class UglySolution
{
    private static string _changedString;

    private class CustomAttribute : Attribute
    {
        public CustomAttribute()
        {
            _changedString = "New";
        }
    }

    public class SomeClass
    {
        public SomeClass()
        {
            _changedString = "Original";
        }

        [Custom]
        public string GetValue()
        {
            typeof(SomeClass).GetMethod("GetValue").GetCustomAttributes(true).OfType<CustomAttribute>().First();
            return _changedString;
        }
    }
}