예제 #1
0
        private void AddAdvices(CrossCutterN.Aspect.Aspect.IAspectBuilder aspect, IAdviceUtility utility, string defaultAdviceAssemblyKey)
        {
            foreach (var adviceEntry in Advices)
            {
                var index             = adviceEntry.Value;
                var adviceAssemblyKey = index.AdviceAssemblyKey;
                if (string.IsNullOrWhiteSpace(adviceAssemblyKey))
                {
                    adviceAssemblyKey = defaultAdviceAssemblyKey;
                }

                if (string.IsNullOrWhiteSpace(adviceAssemblyKey))
                {
                    throw new ApplicationException($"{adviceEntry.Key}: advice assembly key is empty");
                }

                if (string.IsNullOrWhiteSpace(index.MethodKey))
                {
                    throw new ApplicationException($"{adviceEntry.Key}: method key is empty");
                }

                var methodInfo = utility.GetMethod(adviceAssemblyKey, index.MethodKey);
                if (methodInfo == null)
                {
                    throw new ApplicationException($"Method doesn't exist: assembly key = {adviceAssemblyKey}, method key = {index.MethodKey}");
                }

                aspect.SetAdvice(adviceEntry.Key, methodInfo);
            }
        }
예제 #2
0
 /// <summary>
 /// builds a switchable aspect builder with default options according to internal configuration.
 /// </summary>
 /// <param name="builder">Switchable aspect builder with default options.</param>
 /// <param name="utility">Advice utility.</param>
 /// <param name="defaultAdviceAssemblyKey">default advice assembly key.</param>
 /// <returns>The built aspect.</returns>
 protected IAspect Build(ISwitchableAspectWithDefaultOptions builder, IAdviceUtility utility, string defaultAdviceAssemblyKey)
 {
     SetAspectOptions(builder);
     SetAspectSwitchStatus(builder);
     AddAdvices(builder, utility, defaultAdviceAssemblyKey);
     return(builder.Build());
 }
예제 #3
0
        /// <inheritdoc/>
        public override IAspect Build(IAdviceUtility utility, string defaultAdviceAssemblyKey)
        {
            var concernClass    = GetAttribute(ConcernClassAttributeType, utility, defaultAdviceAssemblyKey);
            var concernMethod   = GetAttribute(ConcernMethodAttributeType, utility, defaultAdviceAssemblyKey);
            var concernProperty = GetAttribute(ConcernPropertyAttributeType, utility, defaultAdviceAssemblyKey);
            var noConcern       = GetAttribute(NoConcernAttributeType, utility, defaultAdviceAssemblyKey);
            var aspect          = AspectFactory.InitializeConcernAttributeAspect(concernClass, concernMethod, concernProperty, noConcern);

            return(Build(aspect, utility, defaultAdviceAssemblyKey));
        }
예제 #4
0
        private static Type GetAttribute(AdviceAssemblyTypeIndex index, IAdviceUtility utility, string defaultAdviceAssemblyKey)
        {
            Type concernAttribute = null;

            if (index != null)
            {
                var classConcernAttributeAssemblyKey = index.AdviceAssemblyKey;
                if (string.IsNullOrWhiteSpace(classConcernAttributeAssemblyKey))
                {
                    classConcernAttributeAssemblyKey = defaultAdviceAssemblyKey;
                }

                concernAttribute = utility.GetAttribute(classConcernAttributeAssemblyKey, index.TypeKey) ??
                                   throw new ApplicationException($"Type index {classConcernAttributeAssemblyKey}, {index.TypeKey} not found.");
            }

            return(concernAttribute);
        }
예제 #5
0
 /// <summary>
 /// Initializes a new instance of the <see cref="TargetConfigurationProcessor"/> class.
 /// </summary>
 /// <param name="aspectUtility">Aspect utility that contains all aspect information.</param>
 /// <param name="adviceUtility">Advice utility that contains all advice information.</param>
 /// <param name="processed">Processed assembly list.</param>
 public TargetConfigurationProcessor(IAspectBuilderUtility aspectUtility, IAdviceUtility adviceUtility, IList <string> processed)
 {
     this.aspectUtility = aspectUtility ?? throw new ArgumentNullException("AspectUtility");
     this.adviceUtility = adviceUtility ?? throw new ArgumentNullException("adviceUtility");
     this.processed     = processed ?? throw new ArgumentNullException("processed");
 }
예제 #6
0
        /// <inheritdoc/>
        public override IAspect Build(IAdviceUtility utility, string defaultAdviceAssemblyKey)
        {
            var aspect = new TestAspect();

            return(Build(aspect, utility, defaultAdviceAssemblyKey));
        }
예제 #7
0
        /// <inheritdoc/>
        public override IAspect Build(IAdviceUtility utility, string defaultAdviceAssemblyKey)
        {
            var aspect = AspectFactory.InitializeNameExpressionAspect(Includes, Excludes);

            return(Build(aspect, utility, defaultAdviceAssemblyKey));
        }
예제 #8
0
 /// <inheritdoc/>
 public abstract IAspect Build(IAdviceUtility utility, string defaultAdviceAssemblyKey);