public void Weave(EventDefinition @event, ExtensionPointAttribute extensionPoint, bool isAdd) { var type = @event.DeclaringType; LogInfo($"Weaving event add interceptor {extensionPoint.AttributeType.FullName} at {type.FullName}.{@event.Name}"); var eventInfoField = @event.CacheEventInfo(); var attributeField = CacheAttributeInstance(@event, eventInfoField, extensionPoint); LogInfo("Setter is intercepted"); var method = isAdd ? @event.AddMethod : @event.RemoveMethod; var proceedReference = ImplementProceedSet(method, extensionPoint.AttributeType); // Re-implement method method.Body.Emit(il => { ImplementBody(@event, attributeField, eventInfoField, method, il, proceedReference, isAdd ? addEventHandler : removeEventHandler); }); }