示例#1
0
        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);
            });
        }