return 值的自定义属性,能够访问 C# 中的方法输入参数

Custom attribute on return value with ability to access method input parameters in C#

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

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

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

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

  • 使用专为允许 AOP 而设计的外部库。这里有一个 nice list 这样的库。
  • 如果您使用的是容器,那么它可能支持 AOP。例如这里是 a link 到 StructureMap AOP 相关文档。
  • 您可以尝试自己实现 AOP 功能,但这非常困难(尤其是如果您关心性能)。

这是一种做一些丑陋的事情的方法,它会得到你的结果,但它很好......丑陋。

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;
        }
    }
}