예제 #1
0
 internal AbstractMethodAspectWeaver(IAspectDefinition aspectDefinition, IAspectWeavingSettings aspectWevingSettings)
 {
     advices = aspectDefinition.Advices;
     this.aspectDefinition      = aspectDefinition;
     this.aspectWeavingSettings = aspectWevingSettings;
     weavingSettings            = aspectWevingSettings.WeavingSettings;
     aspectRepository           = aspectWevingSettings.AspectRepository;
     argumentsWeavingSetings    = aspectDefinition.ToArgumentsWeavingSettings();
     aspectDefinition.Advices.ForEach(advice => advice.Accept(adviceDiscoveryVistor));
 }
예제 #2
0
 internal AbstractAspectWeaver(IAspectDefinition aspectDefinition, IAspectWeavingSettings aspectWeavingSettings)
 {
     advices = aspectDefinition.Advices;
     this.aspectDefinition = aspectDefinition;
     this.aspectWeavingSettings = aspectWeavingSettings;
     bindingSettings = aspectDefinition.ToBindingSettings();
     weavingSettings = aspectWeavingSettings.WeavingSettings;
     aspectRepository = aspectWeavingSettings.AspectRepository;
     argumentsWeavingSettings = aspectDefinition.ToArgumentsWeavingSettings();
     aspectDefinition.Advices.ForEach(advice => advice.Accept(adviceDiscoveryVistor));
 }
예제 #3
0
        internal AbstractMethodInterceptionAspectWeaver(IAspectDefinition aspectDefinition, IAspectWeavingSettings aspectWeavingSettings, FieldInfo weavedType)
            : base(aspectDefinition, aspectWeavingSettings)
        {
            IAdviceExpression selectedExpression = null;
            var argumentsWeavingSettings         = aspectDefinition.ToArgumentsWeavingSettings();
            var aspectSettings = new AdviceWeavingSettings(aspectWeavingSettings, argumentsWeavingSettings);

            bindingDependency  = weavedType;
            selectedExpression = ResolveOnMethodInvokeAdvice();
            methodScopeWeavers = new List <IMethodScopeWeaver>();
            methodScopeWeavers.Add(selectedExpression.Reduce(aspectSettings));
            localBuilderRepository = aspectWeavingSettings.LocalBuilderRepository;
        }
        internal AbstractInterceptionAspectWeaver(IAspectDefinition aspectDefinition, IAspectWeavingSettings aspectWeavingSettings, FieldInfo weavedType)
            : base(aspectDefinition, aspectWeavingSettings)
        {
            IAdviceExpression selectedExpression = null;
            AdviceWeavingSettings adviceWeavingSettings = null;

            bindingDependency = weavedType;
            argumentsWeavingSettings = aspectDefinition.ToArgumentsWeavingSettings();
            adviceWeavingSettings = new AdviceWeavingSettings(aspectWeavingSettings, argumentsWeavingSettings);
            selectedExpression = ResolveInterceptionAdviceExpression();
            methodScopeWeavers = new List<IMethodScopeWeaver> {
                selectedExpression.Reduce(adviceWeavingSettings)
            };

            localBuilderRepository = aspectWeavingSettings.LocalBuilderRepository;
        }
예제 #5
0
        internal NestedMethodInterceptionAspectWeaver(Type previousAspectArgType, IAspectDefinition aspectDefinition, IAspectWeavingSettings aspectWeavingSettings, FieldInfo weavedType)
            : base(aspectDefinition, aspectWeavingSettings, weavedType)
        {
            var argumentWeavingSettings = aspectDefinition.ToArgumentsWeavingSettings();

            argumentWeavingSettings.BindingsDependency = weavedType;
            argumentsWeaver = new NestedMethodIntercpetionArgumentsWeaver(previousAspectArgType, aspectWeavingSettings, argumentWeavingSettings);

            if (argumentsWeavingSetings.IsFunction)
            {
                methodScopeWeavers.Add(new NestedFunctionAspectArgsMappingWeaver(previousAspectArgType, aspectWeavingSettings, argumentsWeavingSetings));
            }
            else
            {
                methodScopeWeavers.Add(new NestedActionAspectArgsMappingWeaver(previousAspectArgType, aspectWeavingSettings, argumentsWeavingSetings));
            }

            weaver = new MethodScopeWeaversQueue(methodScopeWeavers);
        }
예제 #6
0
        internal AspectExpressionTreeBuilder(IAspectDefinitionCollection aspectDefinitions)
        {
            var aspectVisitor = new AspectVisitor();
            IAspectDefinition               lastAspectDefinition     = null;
            IAspectExpressionBuilder        invocationAspectBuilder  = null;
            IArgumentsWeavingSettings       argumentsWeavingSettings = null;
            List <IAspectExpressionBuilder> aspectExpressionBuilders = null;

            var aspectsByPriority = aspectDefinitions.OrderBy(aspect => aspect.Aspect.AspectPriority)
                                    .ThenBy(aspect => {
                var value = aspect.Aspect is OnMethodBoundaryAspectAttribute;
                return(Convert.ToInt32(!value));
            });

            lastAspectDefinition     = aspectDefinitions.First();
            argumentsWeavingSettings = lastAspectDefinition.ToArgumentsWeavingSettings();
            aspectExpressionBuilders = aspectsByPriority.ToList(definition => definition.BuildAdvices().Accept(aspectVisitor));
            invocationAspectBuilder  = aspectVisitor.VisitLast(lastAspectDefinition, argumentsWeavingSettings);
            aspectExpressionBuilders.Add(invocationAspectBuilder);
            aspectsStack = new Stack <IAspectExpressionBuilder>(aspectExpressionBuilders);
        }