コード例 #1
0
        /// <inheritdoc/>
        public IPropertyWeavingPlan MakePlan(IProperty property)
        {
            readOnly.Assert(true);
            var getterPlan = WeaverFactory.InitializeWeavingPlan();
            var setterPlan = WeaverFactory.InitializeWeavingPlan();

            foreach (var aspectEntry in aspects)
            {
                var aspect          = aspectEntry.Value;
                var propertyConcern = aspect.CanApplyTo(property);
                if (propertyConcern.IsConcerned())
                {
                    foreach (var joinPoint in aspect.PointCut)
                    {
                        var advice     = aspect.GetAdvice(joinPoint);
                        var aspectName = aspectEntry.Key;
                        var info       = joinPoints[joinPoint][aspectName];
                        if (propertyConcern.IsGetterConcerned())
                        {
                            getterPlan.AddJoinPoint(joinPoint, aspectName, advice, info.Sequence, info.ParameterFlag, aspect.IsSwitchedOn);
                        }

                        if (propertyConcern.IsSetterConcerned())
                        {
                            setterPlan.AddJoinPoint(joinPoint, aspectName, advice, info.Sequence, info.ParameterFlag, aspect.IsSwitchedOn);
                        }
                    }
                }
            }

            return(WeaverFactory.InitializePropertyWeavingPlan(getterPlan.Build(), setterPlan.Build()));
        }
コード例 #2
0
        /// <inheritdoc/>
        public IWeavingPlan MakePlan(IMethod method)
        {
            readOnly.Assert(true);
            var plan = WeaverFactory.InitializeWeavingPlan();

            foreach (var aspectEntry in aspects)
            {
                var aspect = aspectEntry.Value;
                if (aspect.CanApplyTo(method))
                {
                    foreach (var joinPoint in aspect.PointCut)
                    {
                        var advice = aspect.GetAdvice(joinPoint);
                        var id     = aspectEntry.Key;
                        var info   = joinPoints[joinPoint][id];
                        plan.AddJoinPoint(joinPoint, id, advice, info.Sequence, info.ParameterFlag, aspect.IsSwitchedOn);
                    }
                }
            }

            return(plan.Build());
        }