如何将CustomAttribute构造函数转换为il代码

时间:2013-03-13 17:42:28

标签: .net mono.cecil

我试图实现自己的aop框架(如PostSharp)。并坚持一个问题。

说有一个属性:

[AttributeUsage(AttributeTargets.Method)]
public class LogAttribute : Attribute
{
    public LogAttribute(int level, Type type)
    {
        // init fields...
    }
    public virtual void OnEnter(LogEventArg e)
    {
        // do some stuff...
    }
}

适用于以下方法之一:

[Log(3, typeof(Trace))]
static void TestMethod1(string s)
{
     // do some stuff...
}

现在的问题是:如何将其转换为:

static void TestMethod1(string s)
{
     var t = new LogAttribute(3, typeof(Trace));
     t.OnEnter()
     // do some stuff...
}

我想从方法中删除属性,而不是使用这样的东西:

var m = System.Reflection.MethodBase.GetCurrentMethod();
var attr = (LogAttribute) Attribute.GetCustomAttribute(m, typeof(Log));

使用Mono.Cecil我有CustomAttributes.Constructor(MethodReference)和CustomAttributes.ConstructorArguments,它们有' Type'和'价值'属性。但是如何将其转换为il指令???

我唯一可以写的是:

il.InsertBefore(inst0, Instruction.Create(OpCodes.Newobj, attr.Constructor));

但是如何将参数传递给这个构造函数,就像声明它一样? 我需要一个与特定构造函数实现无关的通用选项。

0 个答案:

没有答案