private void AddAdvisorOnChainCreation(object advice, string name) { if (advice is IAdvisors) { if (logger.IsDebugEnabled) { logger.Debug(string.Format("Adding advisor list '{0}'", name)); } IAdvisors advisors = (IAdvisors)advice; foreach (object element in advisors.Advisors) { if (logger.IsDebugEnabled) { logger.Debug(string.Format("Adding advisor '{0}' of type {1}", name, element.GetType().FullName)); } IAdvisor advisor = NamedObjectToAdvisor(element); AddAdvisor(advisor); } } else { if (logger.IsDebugEnabled) { logger.Debug(string.Format("Adding advisor '{0}' of type {1}", name, advice.GetType().FullName)); } IAdvisor advisor = NamedObjectToAdvisor(advice); AddAdvisor(advisor); } }
/// <summary> Add all global interceptors and pointcuts.</summary> private void AddGlobalAdvisor(IListableObjectFactory objectFactory, string prefix) { var globalAspectNames = ObjectFactoryUtils.ObjectNamesForTypeIncludingAncestors(objectFactory, typeof(IAdvisors)); var globalAdvisorNames = ObjectFactoryUtils.ObjectNamesForTypeIncludingAncestors(objectFactory, typeof(IAdvisor)); var globalInterceptorNames = ObjectFactoryUtils.ObjectNamesForTypeIncludingAncestors(objectFactory, typeof(IInterceptor)); List <object> objects = new List <object>(); Dictionary <object, string> names = new Dictionary <object, string>(); for (int i = 0; i < globalAspectNames.Count; i++) { string name = globalAspectNames[i]; if (name.StartsWith(prefix)) { IAdvisors advisors = (IAdvisors)objectFactory.GetObject(name); foreach (object advisor in advisors.Advisors) { // exclude introduction advisors from interceptor list if (!(advisor is IIntroductionAdvisor)) { objects.Add(advisor); names[advisor] = name; } } } } for (int i = 0; i < globalAdvisorNames.Count; i++) { string name = globalAdvisorNames[i]; if (name.StartsWith(prefix)) { object obj = objectFactory.GetObject(name); // exclude introduction advisors from interceptor list if (!(obj is IIntroductionAdvisor)) { objects.Add(obj); names[obj] = name; } } } for (int i = 0; i < globalInterceptorNames.Count; i++) { string name = globalInterceptorNames[i]; if (name.StartsWith(prefix)) { object obj = objectFactory.GetObject(name); objects.Add(obj); names[obj] = name; } } objects.Sort(OrderComparator.Instance); foreach (object obj in objects) { string name = names[obj]; AddAdvisorOnChainCreation(obj, name); } }
/// <summary> Add all global interceptors and pointcuts.</summary> private void AddGlobalAdvisor(IListableObjectFactory objectFactory, string prefix) { string[] globalAspectNames = ObjectFactoryUtils.ObjectNamesForTypeIncludingAncestors(objectFactory, typeof(IAdvisors)); string[] globalAdvisorNames = ObjectFactoryUtils.ObjectNamesForTypeIncludingAncestors(objectFactory, typeof(IAdvisor)); string[] globalInterceptorNames = ObjectFactoryUtils.ObjectNamesForTypeIncludingAncestors(objectFactory, typeof(IInterceptor)); ArrayList objects = new ArrayList(); Hashtable names = new Hashtable(); for (int i = 0; i < globalAspectNames.Length; i++) { string name = globalAspectNames[i]; if (name.StartsWith(prefix)) { IAdvisors advisors = (IAdvisors)objectFactory.GetObject(name); foreach (object advisor in advisors.Advisors) { // exclude introduction advisors from interceptor list if (!(advisor is IIntroductionAdvisor)) { objects.Add(advisor); names[advisor] = name; } } } } for (int i = 0; i < globalAdvisorNames.Length; i++) { string name = globalAdvisorNames[i]; if (name.StartsWith(prefix)) { object obj = objectFactory.GetObject(name); // exclude introduction advisors from interceptor list if (!(obj is IIntroductionAdvisor)) { objects.Add(obj); names[obj] = name; } } } for (int i = 0; i < globalInterceptorNames.Length; i++) { string name = globalInterceptorNames[i]; if (name.StartsWith(prefix)) { object obj = objectFactory.GetObject(name); objects.Add(obj); names[obj] = name; } } ((ArrayList)objects).Sort(new OrderComparator()); foreach (object obj in objects) { string name = (string)names[obj]; AddAdvisorOnChainCreation(obj, name); } }
void IAdvised.AddAdvisors(IAdvisors advisors) { m_advised.AddAdvisors(advisors); }
/// <summary> Add all global introductions.</summary> private void AddGlobalIntroduction(IListableObjectFactory objectFactory, string prefix) { IList <string> globalAspectNames = ObjectFactoryUtils.ObjectNamesForTypeIncludingAncestors(objectFactory, typeof(IAdvisors)); IList <string> globalAdvisorNames = ObjectFactoryUtils.ObjectNamesForTypeIncludingAncestors(objectFactory, typeof(IAdvisor)); IList <string> globalIntroductionNames = ObjectFactoryUtils.ObjectNamesForTypeIncludingAncestors(objectFactory, typeof(IAdvice)); ArrayList objects = new ArrayList(); Dictionary <object, string> names = new Dictionary <object, string>(); for (int i = 0; i < globalAspectNames.Count; i++) { string name = globalAspectNames[i]; if (name.StartsWith(prefix)) { IAdvisors advisors = (IAdvisors)objectFactory.GetObject(name); foreach (object advisor in advisors.Advisors) { // only include introduction advisors if (advisor is IIntroductionAdvisor) { objects.Add(advisor); names[advisor] = name; } } } } for (int i = 0; i < globalAdvisorNames.Count; i++) { string name = globalAdvisorNames[i]; if (name.StartsWith(prefix)) { object obj = objectFactory.GetObject(name); // only include introduction advisors if (obj is IIntroductionAdvisor) { objects.Add(obj); names[obj] = name; } } } for (int i = 0; i < globalIntroductionNames.Count; i++) { string name = globalIntroductionNames[i]; if (name.StartsWith(prefix)) { object obj = objectFactory.GetObject(name); // exclude other advice types if (!(obj is IInterceptor || obj is IBeforeAdvice || obj is IAfterReturningAdvice)) { objects.Add(obj); names[obj] = name; } } } objects.Sort(new OrderComparator()); foreach (object obj in objects) { string name = names[obj]; AddIntroductionOnChainCreation(obj, name); } }
/// <summary> /// Adds the advisors from the supplied <paramref name="advisors"/> /// to the list of <see cref="Spring.Aop.Framework.IAdvised.Advisors"/>. /// </summary> /// <param name="advisors"> /// The <see cref="IAdvisors"/> to add advisors from. /// </param> /// <exception cref="AopConfigException"> /// If this proxy configuration is frozen and the /// <paramref name="advisors"/> cannot be added. /// </exception> public void AddAdvisors(IAdvisors advisors) { foreach (IAdvisor advisor in advisors.Advisors) { if (advisor is IIntroductionAdvisor) { AddIntroduction((IIntroductionAdvisor)advisor); } else { AddAdvisor(advisor); } } }