internal TopBindingOnMethodBoundaryAspectWeaver(IAspectWeaver nestedWeaver, IMethodAspectDefinition aspectDefinition, IAspectWeavingSettings settings) : base(nestedWeaver, aspectDefinition, settings) { var @params = aspectDefinition.Member.GetParameters(); argumentsWeavingSettings.Parameters = @params.ToArray(@param => @param.ParameterType); argumentsWeaver = new TopBindingOnMethodExecutionArgumentsWeaver(aspectDefinition.Member, argumentsWeavingSettings, settings); }
public ILGenerator Weave(ILGenerator ilGenerator) { aspectAttributeWeaver.Weave(); aspectArgsMapperWeaver.Weave(); weaver = aspectExpression.Reduce(settings); return(weaver.Weave(ilGenerator)); }
internal TopOnMethodBoundaryAspectWeaver(IAspectWeaver nestedWeaver, IMethodAspectDefinition aspectDefinition, IAspectWeavingSettings aspectWeavingSettings) : base(nestedWeaver, aspectDefinition, aspectWeavingSettings) { var @params = aspectDefinition.Member.GetParameters(); methodScopeWeavers = new List<IMethodScopeWeaver>(); argumentsWeavingSettings.Parameters = @params.ToArray(@param => @param.ParameterType).ToArray(); argumentsWeaver = new TopOnMethodBoundaryArgumentsWeaver(aspectDefinition.Member, argumentsWeavingSettings, aspectWeavingSettings); }
internal TopOnMethodBoundaryAspectWeaver(IAspectWeaver nestedWeaver, IMethodAspectDefinition aspectDefinition, IAspectWeavingSettings aspectWeavingSettings) : base(nestedWeaver, aspectDefinition, aspectWeavingSettings) { var @params = aspectDefinition.Member.GetParameters(); methodScopeWeavers = new List <IMethodScopeWeaver>(); argumentsWeavingSettings.Parameters = @params.ToArray(@param => @param.ParameterType).ToArray(); argumentsWeaver = new TopOnMethodBoundaryArgumentsWeaver(aspectDefinition.Member, argumentsWeavingSettings, aspectWeavingSettings); }
public Processor(IJanitor janitor, IAspectExtractor aspectExtractor, IAssetsCache cache, IInjectionCollector injectionCollector, IAspectWeaver assectWeaver, IEnumerable <IEffectWeaver> effectWeavers, ILogger logger) { _aspectExtractor = aspectExtractor; _injectionCollector = injectionCollector; _cache = cache; _assectWeaver = assectWeaver; _effectWeavers = effectWeavers; _janitor = janitor; _log = logger; }
public EventInterceptionBindingWeaver(EventInfo @event, BindingSettings bindingSettings, IAspectWeavingSettings aspectWeavingSettings, IAspectWeaver addMethodScopeWeaver, IAspectWeaver removeMethodScopeWeaver, IAspectWeaver invokeMethodScopeWeaver) { this.@event = @event; this.bindingSettings = bindingSettings; this.addMethodScopeWeaver = addMethodScopeWeaver; this.aspectWeavingSettings = aspectWeavingSettings; this.removeMethodScopeWeaver = removeMethodScopeWeaver; this.invokeMethodScopeWeaver = invokeMethodScopeWeaver; ResolveParameterTypes(); }
protected override FieldInfo WeaveType() { IAspectWeaver aspectWeaver = null; IBindingWeaver bindingWeaver = null; var aspectSettings = GetAspectsWeavingSettings(); aspectWeaver = aspectExpression.Reduce(aspectSettings); bindingWeaver = new GetPropertyInterceptionBindingWeaver(aspectDefinition.Member, bindingSettings, aspectSettings, aspectWeaver); return(bindingWeaver.Weave()); }
public Processor( IAspectReader aspectExtractor, IInjectionReader injectionCollector, IAspectWeaver aspectWeaver, IEnumerable <IEffectWeaver> effectWeavers, ILogger logger) : base(logger) { _aspectExtractor = aspectExtractor; _injectionCollector = injectionCollector; _aspectWeaver = aspectWeaver; _effectWeavers = effectWeavers; }
public AopModuleWeaver( IAspectReader aspectExtractor, IInjectionReader injectionCollector, IAspectWeaver aspectWeaver, IEnumerable <IEffectWeaver> effectWeavers, BaseModuleWeaver weaver) { _aspectExtractor = aspectExtractor; _injectionCollector = injectionCollector; _aspectWeaver = aspectWeaver; _effectWeavers = effectWeavers; _weaver = weaver; }
protected virtual FieldInfo WeaveType() { IAspectWeaver aspectWeaver = null; IMethodBindingWeaver bindingWeaver = null; var aspectType = aspectDefinition.Aspect.AspectType; var aspectSetings = GetAspectsWeavingSettings(); aspectWeaver = aspectExpression.Reduce(aspectSetings); bindingSettings.LocalBuilderRepository = aspectSetings.LocalBuilderRepository; bindingWeaver = new OnMethodInterceptionBindingWeaver(aspectType, bindingSettings, aspectWeavingSettings, aspectWeaver); return(bindingWeaver.Weave()); }
internal MethodInterceptionBindingWeaver(MethodInfo method, BindingSettings bindingSettings, IAspectWeavingSettings aspectWeavingSettings, IAspectWeaver methodScopeWeaver) : base(method, bindingSettings, aspectWeavingSettings, methodScopeWeaver) { }
internal NestedOnMethodBoundaryAspectWeaver(IAspectWeaver nestedWeaver, IAspectDefinition aspectDefinition, IAspectWeavingSettings aspectWeavingSettings) : base(nestedWeaver, aspectDefinition, aspectWeavingSettings) { }
internal SetPropertyInterceptionBindingWeaver(PropertyInfo property, BindingSettings bindingSettings, IAspectWeavingSettings aspectWeavingSettings, IAspectWeaver methodScopeWeaver) : base(property, bindingSettings, aspectWeavingSettings, setMethodScopeWeaver: methodScopeWeaver) { }
internal AbstractOnMethodBoundaryAspectWeaver(IAspectWeaver nestedAspect, IAspectDefinition aspectDefinition, IAspectWeavingSettings aspectWeavingSettings) : base(aspectDefinition, aspectWeavingSettings) { IMethodScopeWeaver entryWeaver = null; IMethodScopeWeaver catchWeaver = null; Action <ILGenerator> storeArgsAction = null; IAdviceExpression selectedExpression = null; IMethodScopeWeaver storeArgsArgsWeaver = null; var finallyWeavers = new List <IMethodScopeWeaver>(); var adviceWeavingSettings = new AdviceWeavingSettings(aspectWeavingSettings, argumentsWeavingSetings); ArgumentType = argumentsWeavingSetings.ArgumentType; byRefArgumentsStoreWeaver = aspectWeavingSettings.ByRefArgumentsStoreWeaver; storeArgsAction = byRefArgumentsStoreWeaver.StoreArgsIfNeeded; storeArgsArgsWeaver = storeArgsAction.ToMethodScopeWeaver(); tryWeavers = new List <IMethodScopeWeaver>() { nestedAspect }; localBuilderRepository = aspectWeavingSettings.LocalBuilderRepository; if (adviceDiscoveryVistor.HasOnMethodEntryAdvice) { selectedExpression = ResolveOnMethodEntryAdvice(); entryWeaver = selectedExpression.Reduce(adviceWeavingSettings); } if (adviceDiscoveryVistor.HasOnMethodSuccessAdvice) { selectedExpression = ResolveOnMethodSuccessAdvice(); tryWeavers.Add(selectedExpression.Reduce(adviceWeavingSettings)); } if (argumentsWeavingSetings.IsFunction) { OnFunctionWeavingDetected(); } if (adviceDiscoveryVistor.HasFinallyAdvice) { selectedExpression = ResolveFinallyAdvice(); finallyWeavers.Add(selectedExpression.Reduce(adviceWeavingSettings)); finallyWeavers.Add(storeArgsArgsWeaver); if (adviceDiscoveryVistor.HasOnMethodExceptionAdvice) { var aspectMember = aspectRepository.GetAspectFieldByType(aspectDefinition.Aspect.AspectType); var settings = new TryCatchFinallySettings(ArgumentType, aspectMember, localBuilderRepository); selectedExpression = ResolveOnMethodExceptionAdvice(); catchWeaver = selectedExpression.Reduce(adviceWeavingSettings); weaver = new TryCatchFinallyAspectWeaver(settings, entryWeaver, tryWeavers, catchWeaver, finallyWeavers, returnValueWeaver); } else { weaver = new OnMethodBoundaryTryFinallyAspectWeaver(entryWeaver, tryWeavers, finallyWeavers, returnValueWeaver); } } else { var weavers = new List <IMethodScopeWeaver> { entryWeaver }; if (!byRefArgumentsStoreWeaver.ContainsByRefParams) { weavers.AddRange(tryWeavers); if (returnValueWeaver.IsNotNull()) { weavers.Add(returnValueWeaver); } weaver = new MethodScopeWeaversQueue(weavers); } else { finallyWeavers.Add(storeArgsArgsWeaver); weaver = new OnMethodBoundaryTryFinallyAspectWeaver(entryWeaver, weavers, finallyWeavers, returnValueWeaver); } } }
internal NestedOnMethodBoundaryAspectWeaver(Type previousAspectArgsType, IAspectWeaver nestedWeaver, IAspectDefinition aspectDefinition, IAspectWeavingSettings aspectWeavingSettings) : base(nestedWeaver, aspectDefinition, aspectWeavingSettings) { }
internal AbstractTopOnMethodBoundaryAspectWeaver(IAspectWeaver nestedAspect, IAspectDefinition aspectDefinition, IAspectWeavingSettings aspectWeavingSettings) : base(nestedAspect, aspectDefinition, aspectWeavingSettings) { }
internal OnMethodInterceptionBindingWeaver(Type aspectType, BindingSettings bindingSettings, IAspectWeavingSettings aspectWeavingSettings, IAspectWeaver methodScopeWeaver) : base(bindingSettings, aspectWeavingSettings, methodScopeWeaver) { localBuilderRepository = bindingSettings.LocalBuilderRepository; }
internal AbstractOnMethodBoundaryAspectWeaver(IAspectWeaver nestedAspect, IAspectDefinition aspectDefinition, IAspectWeavingSettings aspectWeavingSettings) : base(aspectDefinition, aspectWeavingSettings) { IAdviceExpression selectedExpression = null; var catchWeavers = new List<IMethodScopeWeaver>(); var entryWeavers = new List<IMethodScopeWeaver>(); var finallyWeavers = new List<IMethodScopeWeaver>(); Action<ILGenerator> restoreArgsIfNeededAction = null; IMethodScopeWeaver restoreArgsIfNeededScopeWeaver = null; var adviceWeavingSettings = new AdviceWeavingSettings(aspectWeavingSettings, argumentsWeavingSettings); ArgumentType = argumentsWeavingSettings.ArgumentType; tryWeavers = new List<IMethodScopeWeaver>() { nestedAspect }; localBuilderRepository = aspectWeavingSettings.LocalBuilderRepository; byRefArgumentsStoreWeaver = aspectWeavingSettings.ByRefArgumentsStoreWeaver; restoreArgsIfNeededAction = byRefArgumentsStoreWeaver.RestoreArgsIfNeeded; restoreArgsIfNeededScopeWeaver = restoreArgsIfNeededAction.ToMethodScopeWeaver(); if (adviceDiscoveryVistor.HasOnMethodEntryAdvice) { selectedExpression = ResolveOnMethodEntryAdvice(); entryWeavers.Add(selectedExpression.Reduce(adviceWeavingSettings)); } AddEntryScopeWeavers(entryWeavers); if (adviceDiscoveryVistor.HasOnMethodSuccessAdvice) { selectedExpression = ResolveOnMethodSuccessAdvice(); tryWeavers.Add(selectedExpression.Reduce(adviceWeavingSettings)); } if (argumentsWeavingSettings.IsFunction()) { OnFunctionWeavingDetected(); } if (adviceDiscoveryVistor.HasFinallyAdvice) { selectedExpression = ResolveFinallyAdvice(); finallyWeavers.Add(selectedExpression.Reduce(adviceWeavingSettings)); AddFinallyScopeWeavers(finallyWeavers); if (adviceDiscoveryVistor.HasOnMethodExceptionAdvice) { var aspectMember = aspectRepository.GetAspectFieldByType(aspectDefinition.Aspect.AspectType); var settings = new TryCatchFinallySettings(ArgumentType, localBuilderRepository); selectedExpression = ResolveOnMethodExceptionAdvice(); catchWeavers.Add(restoreArgsIfNeededScopeWeaver); catchWeavers.Add(selectedExpression.Reduce(adviceWeavingSettings)); weaver = new TryCatchFinallyAspectWeaver(settings, entryWeavers, tryWeavers, catchWeavers, finallyWeavers, returnValueWeaver); } else { finallyWeavers.Insert(0, restoreArgsIfNeededScopeWeaver); weaver = new OnMethodBoundaryTryFinallyAspectWeaver(entryWeavers, tryWeavers, finallyWeavers, returnValueWeaver); } } else { if (!byRefArgumentsStoreWeaver.ContainsByRefParams) { var weavers = entryWeavers; weavers.AddRange(tryWeavers); if (returnValueWeaver.IsNotNull()) { weavers.Add(returnValueWeaver); } weaver = new MethodScopeWeaversQueue(weavers); } else { AddFinallyScopeWeavers(finallyWeavers); finallyWeavers.Insert(0, restoreArgsIfNeededScopeWeaver); weaver = new OnMethodBoundaryTryFinallyAspectWeaver(entryWeavers, tryWeavers, finallyWeavers, returnValueWeaver); } } }
internal FullPropertyInterceptionBindingWeaver(PropertyInfo property, BindingSettings bindingSettings, IAspectWeavingSettings aspectWeavingSettings, IAspectWeaver getMethodScopeWeaver, IAspectWeaver setMethodScopeWeaver) : base(property, bindingSettings, aspectWeavingSettings, getMethodScopeWeaver, setMethodScopeWeaver) { }
public AspectInterceptor(object target, IAspectWeaver aspectWeaver) : base(target) { _aspectWeaver = aspectWeaver; }