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); } }
/// <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()); }
/// <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)); }
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); }
/// <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"); }
/// <inheritdoc/> public override IAspect Build(IAdviceUtility utility, string defaultAdviceAssemblyKey) { var aspect = new TestAspect(); return(Build(aspect, utility, defaultAdviceAssemblyKey)); }
/// <inheritdoc/> public override IAspect Build(IAdviceUtility utility, string defaultAdviceAssemblyKey) { var aspect = AspectFactory.InitializeNameExpressionAspect(Includes, Excludes); return(Build(aspect, utility, defaultAdviceAssemblyKey)); }
/// <inheritdoc/> public abstract IAspect Build(IAdviceUtility utility, string defaultAdviceAssemblyKey);