示例#1
0
 public AroundMethodWeaver(DemonTypes demonTypes, MethodDefinition target, MethodReference advice, FieldDefinition adviceField)
 {
     _demonTypes  = demonTypes;
     _target      = target;
     _advice      = advice;
     _adviceField = adviceField;
     _il          = target.Body.GetILProcessor();
     _emitter     = EmitterFactory.GetAppend(_il);
 }
 public static void AddEmitterFactory(string name, EmitterFactory emitterFactory)
 {
     if (!EmitterFactories.ContainsKey(name))
     {
         EmitterFactories.Add(name, emitterFactory);
     }
     else
     {
         EmitterFactories[name] = emitterFactory;
     }
 }
示例#3
0
        public BeforeMethodWeaver(DemonTypes demonTypes, MethodDefinition target, MethodReference advice, FieldDefinition adviceField)
        {
            _demonTypes  = demonTypes;
            _target      = target;
            _advice      = advice;
            _adviceField = adviceField;
            _il          = target.Body.GetILProcessor();

            var originalFirstInstruction = target.Body.Instructions[0];

            _emitter = EmitterFactory.Get(_il, i => _il.InsertBefore(originalFirstInstruction, i));
            _insertBeforeOriginalFirst = i => _il.InsertBefore(originalFirstInstruction, i);
        }