2

实际上,我几乎没有什么问题可以更容易理解我要问的问题,我必须先展示我的代码。

public static void Main(string[] args)
{
    CustomClass customClass = new CustomClass();
    customClass.SomeMethod("asdas", true, 30.5);

}

public class CustomClass
{
    [MyAttribute]
    public Boolean SomeMethod(String a, Boolean b, Double c)
    {
        return true;
    }
}

public class MyAttribute : Attribute
{
    public MyAttribute()
    {
        SomeIntercepter.InterceptEverything();
    }
    public void DoSomethingBeforeMethodexecutes()
    {
      ....
    }
    public void DoSomethingAfterMethodExecutes()
    {
      ....
    }
}

public class SomeIntercepter
{
    public static void InterceptEverything()
    {
        StackTrace stackTrace = new StackTrace();
        var method = stackTrace.GetFrame(2).GetMethod();
        var parameters = method.GetParameters();
        if (parameters.Length > 3)
            return;

        String cacheKey = method.Name;

        for (int i = 0; i < parameters.Length; i++)
        {
            //HOW TO GET THE PARAMETER DATA ASSIGNED
            cacheKey += "_" + parameters[i];
        }
    }
}

所以我尝试做什么。我尝试在它调用的每个方法上拦截方法,并根据标记为的方法的传入数据做一些事情[MyAttribute]。所以我通过 StackTrace 访问该方法并尝试使用 GetParameters 获取所有传入数据。这是我的问题:1)如何对SomeMethodInterceptEverything() 中的所有传入数据进行对象 [] 2)如何对MyAttribute运行前标记的方法和MyAttribute运行方法DoSomethingBeforeMethodexecutes() 说 3)如何对 MyAttribute运行后说带有MyAttribute运行方法的标记方法DoSomethingAfterMethodexecutes()

感谢您的任何建议。

4

1 回答 1

3

您无法通过. ParameterInfo该设施不存在。

另外:属性不执行。除非您使用 postsharp 之类的东西,否则它们只是information。要让它们执行,您必须显式编写反射代码来执行此操作。

于 2013-03-15T10:50:26.937 回答