/// <summary>
 /// Returns an <see cref="AopAlliance.Intercept.IInterceptor"/> to
 /// allow the use of the supplied <paramref name="advisor"/> in an
 /// interception-based framework.
 /// </summary>
 /// <param name="advisor">The advisor to find an interceptor for.</param>
 /// <returns>
 /// An interceptor to expose this advisor's behaviour.
 /// </returns>
 /// <exception cref="UnknownAdviceTypeException">
 /// If the advisor type is not understood by any registered
 /// <see cref="Spring.Aop.Framework.Adapter.IAdvisorAdapter"/>.
 /// </exception>
 public virtual IInterceptor GetInterceptor(IAdvisor advisor)
 {
     IAdvice advice = advisor.Advice;
     if (advice is IInterceptor)
     {
         return (IInterceptor) advice;
     }
     foreach (IAdvisorAdapter adapter in this.adapters)
     {
         if (adapter.SupportsAdvice(advice))
         {
             return adapter.GetInterceptor(advisor);
         }
     }
     throw new UnknownAdviceTypeException(advice);
 }
 /// <summary>
 /// Wraps the supplied <paramref name="advisor"/>'s
 /// <see cref="Spring.Aop.IAdvisor.Advice"/> within a
 /// <see cref="Spring.Aop.Framework.Adapter.ThrowsAdviceInterceptor"/>
 /// instance.
 /// </summary>
 /// <param name="advisor">
 /// The advisor exposing the <see cref="AopAlliance.Aop.IAdvice"/> that
 /// is to be wrapped.
 /// </param>
 /// <returns>
 /// The supplied <paramref name="advisor"/>'s
 /// <see cref="Spring.Aop.IAdvisor.Advice"/> wrapped within a
 /// <see cref="Spring.Aop.Framework.Adapter.ThrowsAdviceInterceptor"/>
 /// instance.
 /// </returns>
 public virtual IInterceptor GetInterceptor(IAdvisor advisor)
 {
     return new ThrowsAdviceInterceptor(advisor.Advice);
 }
        /// <summary>
        /// Determines the advisors for the given object, including the specific interceptors
        /// as well as the common interceptor, all adapted to the Advisor interface.
        /// </summary>
        /// <param name="targetName">The name of the object.</param>
        /// <param name="specificInterceptors">The set of interceptors that is specific to this
        /// object (may be empty, but not null)</param>
        /// <returns>The list of Advisors for the given object</returns>
        protected virtual IAdvisor[] BuildAdvisors(string targetName, object[] specificInterceptors)
        {
            // handle prototypes correctly
            IAdvisor[] commonInterceptors = ResolveInterceptorNames();

            ArrayList allInterceptors = new ArrayList();
            if (specificInterceptors != null)
            {
                allInterceptors.AddRange(specificInterceptors);
                if (commonInterceptors != null)
                {
                    if (applyCommonInterceptorsFirst)
                    {
                        allInterceptors.InsertRange(0, commonInterceptors);
                    }
                    else
                    {
                        allInterceptors.AddRange(commonInterceptors);
                    }
                }
            }
            if (logger.IsInfoEnabled)
            {
                int nrOfCommonInterceptors = commonInterceptors != null ? commonInterceptors.Length : 0;
                int nrOfSpecificInterceptors = specificInterceptors != null ? specificInterceptors.Length : 0;
                logger.Info(string.Format("Creating implicit proxy for object '{0}' with {1} common interceptors and {2} specific interceptors", targetName, nrOfCommonInterceptors, nrOfSpecificInterceptors));
            }

            IAdvisor[] advisors = new IAdvisor[allInterceptors.Count];
            for (int i = 0; i < allInterceptors.Count; i++)
            {
                advisors[i] = advisorAdapterRegistry.Wrap(allInterceptors[i]);
            }
            return advisors;
        }
示例#4
0
 public void AddAdvisor(IAdvisor <Person> advisor)
 {
     Advisors.Add(advisor);
 }
		public IInterceptor GetInterceptor(IAdvisor advisor)
		{
			ISimpleBeforeAdvice advice = (ISimpleBeforeAdvice) advisor.Advice;
			return new SimpleBeforeAdviceInterceptor(advice) ;
		}
 /// <summary>
 /// Adds the supplied <paramref name="advisor"/> to the list
 /// of <see cref="Spring.Aop.Framework.AdvisedSupport.Advisors"/>.
 /// </summary>
 /// <param name="advisor">
 /// The <see cref="Spring.Aop.IAdvisor"/> to add.
 /// </param>
 /// <exception cref="AopConfigException">
 /// If this proxy configuration is frozen and the
 /// <paramref name="advisor"/> cannot be added.
 /// </exception>
 public virtual void AddAdvisor(IAdvisor advisor)
 {
     AddAdvisor(this._advisors.Count, advisor);
 }
 /// <summary>
 /// Removes the supplied <paramref name="advisor"/> the list of advisors
 /// for this proxy.
 /// </summary>
 /// <param name="advisor">The advisor to remove.</param>
 /// <returns>
 /// <see langword="true"/> if advisor was found in the list of
 /// <see cref="Spring.Aop.Framework.AdvisedSupport.Advisors"/> for this
 /// proxy and was successfully removed; <see langword="false"/> if not
 /// or if the supplied <paramref name="advisor"/> is <cref lang="null"/>.
 /// </returns>
 /// <exception cref="AopConfigException">
 /// If this proxy configuration is frozen and the
 /// <paramref name="advisor"/> cannot be removed.
 /// </exception>
 public bool RemoveAdvisor(IAdvisor advisor)
 {
     DieIfFrozen("Cannot remove advisor: config is frozen");
     bool wasRemoved = false;
     if (advisor != null)
     {
         lock (this.SyncRoot)
         {
             int index = IndexOf(advisor);
             if (index == -1)
             {
                 wasRemoved = false;
             }
             else
             {
                 RemoveAdvisorInternal(index);
                 wasRemoved = true;
             }
         }
     }
     return wasRemoved;
 }
 /// <summary>
 /// Bring the advisors array up to date with the list.
 /// </summary>
 private void UpdateAdvisorsArray()
 {
     IAdvisor[] advisorsArray = new IAdvisor[this._advisors.Count];
     this._advisors.CopyTo(advisorsArray, 0);
     this._advisorsArray = advisorsArray;
 }
 void IAdvised.AddAdvisor(IAdvisor advisor)
 {
     m_advised.AddAdvisor(advisor);
 }
 public void AddAdvisor(IAdvisor advise, string key)
 {
     advisorsPool.Add(key, advise);
 }
示例#11
0
 /// <summary> 
 /// Can the supplied <paramref name="advisor"/> apply at all on the
 /// supplied <paramref name="targetType"/>?
 /// </summary>
 /// <remarks>
 /// <p>
 /// This is an important test as it can be used to optimize out an
 /// advisor for a class.
 /// </p>
 /// </remarks>
 /// <param name="advisor">The advisor to check.</param>
 /// <param name="targetType">The class being tested.</param>
 /// <param name="proxyInterfaces">
 /// The interfaces being proxied. If <see langword="null"/>, all
 /// methods on a class may be proxied.
 /// </param>
 /// <param name="hasIntroductions">whether or not the advisor chain for the target object includes any introductions.</param>
 /// <returns>
 /// <see langword="true"/> if the advisor can apply on any method.
 /// </returns>
 public static bool CanApply(IAdvisor advisor, Type targetType, Type[] proxyInterfaces, bool hasIntroductions)
 {
     if (advisor is IIntroductionAdvisor)
     {
         return ((IIntroductionAdvisor)advisor).TypeFilter.Matches(targetType);
     }
     else if (advisor is IPointcutAdvisor)
     {
         IPointcutAdvisor pca = (IPointcutAdvisor)advisor;
         return CanApply(pca.Pointcut, targetType, proxyInterfaces, hasIntroductions);
     }
     // no pointcut specified so assume it applies...
     return true;
 }
示例#12
0
 /// <summary> 
 /// Can the supplied <paramref name="advisor"/> apply at all on the
 /// supplied <paramref name="targetType"/>?
 /// </summary>
 /// <remarks>
 /// <p>
 /// This is an important test as it can be used to optimize out an
 /// advisor for a class.
 /// </p>
 /// </remarks>
 /// <param name="advisor">The advisor to check.</param>
 /// <param name="targetType">The class being tested.</param>
 /// <param name="proxyInterfaces">
 /// The interfaces being proxied. If <see langword="null"/>, all
 /// methods on a class may be proxied.
 /// </param>
 /// <returns>
 /// <see langword="true"/> if the advisor can apply on any method.
 /// </returns>
 public static bool CanApply(IAdvisor advisor, Type targetType, Type[] proxyInterfaces)
 {
     return CanApply(advisor, targetType, proxyInterfaces, false);
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="DynamicProxyInterceptor"/> class.
 /// </summary>
 /// <param name="advisors"></param>
 public DynamicProxyInterceptor(IAdvisor[] advisors)
 {
     this.advisors = advisors;
 }
 /// <summary>
 /// Wraps the supplied <paramref name="advisor"/>'s
 /// <see cref="Spring.Aop.IAdvisor.Advice"/> within a
 /// <see cref="Spring.Aop.Framework.Adapter.MethodBeforeAdviceInterceptor"/>
 /// instance.
 /// </summary>
 /// <param name="advisor">
 /// The advisor exposing the <see cref="AopAlliance.Aop.IAdvice"/> that
 /// is to be wrapped.
 /// </param>
 /// <returns>
 /// The supplied <paramref name="advisor"/>'s
 /// <see cref="Spring.Aop.IAdvisor.Advice"/> wrapped within a
 /// <see cref="Spring.Aop.Framework.Adapter.MethodBeforeAdviceInterceptor"/>
 /// instance.
 /// </returns>
 public virtual IInterceptor GetInterceptor(IAdvisor advisor)
 {
     IMethodBeforeAdvice advice = (IMethodBeforeAdvice) advisor.Advice;
     return new MethodBeforeAdviceInterceptor(advice);
 }
 /// <summary>
 /// Wraps the supplied <paramref name="advisor"/>'s
 /// <see cref="Spring.Aop.IAdvisor.Advice"/> within a
 /// <see cref="Spring.Aop.Framework.Adapter.AfterReturningAdviceInterceptor"/>
 /// instance.
 /// </summary>
 /// <param name="advisor">
 /// The advisor exposing the <see cref="AopAlliance.Aop.IAdvice"/> that
 /// is to be wrapped.
 /// </param>
 /// <returns>
 /// The supplied <paramref name="advisor"/>'s
 /// <see cref="Spring.Aop.IAdvisor.Advice"/> wrapped within a
 /// <see cref="Spring.Aop.Framework.Adapter.AfterReturningAdviceInterceptor"/>
 /// instance.
 /// </returns>
 public virtual IInterceptor GetInterceptor(IAdvisor advisor)
 {
     IAfterReturningAdvice advice = (IAfterReturningAdvice) advisor.Advice;
     return new AfterReturningAdviceInterceptor(advice);
 }
 /// <summary> 
 /// Return the index (0 based) of the supplied
 /// <see cref="Spring.Aop.IAdvisor"/> in the interceptor
 /// (advice) chain for this proxy.
 /// </summary>
 /// <param name="advisor">
 /// The <see cref="Spring.Aop.IAdvisor"/> to search for.
 /// </param>
 /// <returns>
 /// The zero (0) based index of this advisor, or -1 if the
 /// supplied <paramref name="advisor"/> is not an advisor for this
 /// proxy.
 /// </returns>
 /// <remarks>
 /// Access is not synchronized.
 /// </remarks>
 private int IndexOfInternal(IAdvisor advisor)
 {
     return this._advisors != null ? this._advisors.IndexOf(advisor) : -1;
 }
 void IAdvised.AddAdvisor(int pos, IAdvisor advisor)
 {
     m_advised.AddAdvisor(pos, advisor);
 }
 /// <summary> 
 /// Return the index (0 based) of the supplied
 /// <see cref="Spring.Aop.IAdvisor"/> in the interceptor
 /// (advice) chain for this proxy.
 /// </summary>
 /// <param name="advisor">
 /// The <see cref="Spring.Aop.IAdvisor"/> to search for.
 /// </param>
 /// <returns>
 /// The zero (0) based index of this advisor, or -1 if the
 /// supplied <paramref name="advisor"/> is not an advisor for this
 /// proxy.
 /// </returns>
 public virtual int IndexOf(IAdvisor advisor)
 {
     lock (this.SyncRoot)
     {
         return IndexOfInternal(advisor);
     }
 }
 int IAdvised.IndexOf(IAdvisor advisor)
 {
     return m_advised.IndexOf(advisor);
 }
        /// <summary>
        /// Adds the supplied <paramref name="advisor"/> to the list
        /// of <see cref="Spring.Aop.Framework.AdvisedSupport.Advisors"/>.
        /// </summary>
        /// <param name="index">
        /// The index in the <see cref="Spring.Aop.Framework.AdvisedSupport.Advisors"/>
        /// list at which the supplied <paramref name="advisor"/>
        /// is to be inserted. If -1, appends to the end of the list.
        /// </param>
        /// <param name="advisor">
        /// The <see cref="Spring.Aop.IIntroductionAdvisor"/> to add.
        /// </param>
        /// <exception cref="AopConfigException">
        /// If this proxy configuration is frozen and the
        /// <paramref name="advisor"/> cannot be added.
        /// </exception>
        public virtual void AddAdvisor(int index, IAdvisor advisor)
        {
            DieIfFrozen("Cannot add advisor: config is frozen");
            lock (this.SyncRoot)
            {
                // advisor already in list (SPRNET-846)
                if (_advisors.Contains(advisor)) return;

                if (index == -1)
                {
                    this._advisors.Add(advisor);
                }
                else
                {
                    this._advisors.Insert(index, advisor);
                }
                UpdateAdvisorsArray();
                AdviceChanged();
            }
        }
 bool IAdvised.RemoveAdvisor(IAdvisor advisor)
 {
     return m_advised.RemoveAdvisor(advisor);
 }
 /// <summary> 
 /// Replaces the <paramref name="oldAdvisor"/> with the
 /// <paramref name="newAdvisor"/>.
 /// </summary>
 /// <param name="oldAdvisor">
 /// The original (old) advisor to be replaced.
 /// </param>
 /// <param name="newAdvisor">
 /// The new advisor to replace the <paramref name="oldAdvisor"/> with.
 /// </param>
 /// <returns>
 /// <see langword="true"/> if the <paramref name="oldAdvisor"/> was
 /// replaced; if the <paramref name="oldAdvisor"/> was not found in the
 /// advisors collection (or the <paramref name="newAdvisor"/> is
 /// <see lang="null"/>, this method returns <see langword="false"/>
 /// and (effectively) does nothing.
 /// </returns>
 /// <exception cref="AopConfigException">
 /// If this proxy configuration is frozen and the
 /// <paramref name="oldAdvisor"/> cannot be replaced.
 /// </exception>
 /// <seealso cref="Spring.Aop.Framework.ProxyConfig.IsFrozen"/>
 public bool ReplaceAdvisor(IAdvisor oldAdvisor, IAdvisor newAdvisor)
 {
     DieIfFrozen("Cannot replace advisor: config is frozen.");
     lock (this.SyncRoot)
     {
         int index = IndexOf(oldAdvisor);
         if (index == -1 || newAdvisor == null)
         {
             return false;
         }
         RemoveAdvisor(index);
         AddAdvisor(index, newAdvisor);
     }
     return true;
 }
 bool IAdvised.ReplaceAdvisor(IAdvisor a, IAdvisor b)
 {
     return m_advised.ReplaceAdvisor(a, b);
 }
        /// <summary>
        /// Wraps the supplied <paramref name="advisor"/>'s
        /// <see cref="Spring.Aop.IAdvisor.Advice"/> within a
        /// <see cref="Spring.Aop.Framework.Adapter.AfterReturningAdviceInterceptor"/>
        /// instance.
        /// </summary>
        /// <param name="advisor">
        /// The advisor exposing the <see cref="AopAlliance.Aop.IAdvice"/> that
        /// is to be wrapped.
        /// </param>
        /// <returns>
        /// The supplied <paramref name="advisor"/>'s
        /// <see cref="Spring.Aop.IAdvisor.Advice"/> wrapped within a
        /// <see cref="Spring.Aop.Framework.Adapter.AfterReturningAdviceInterceptor"/>
        /// instance.
        /// </returns>
        public virtual IInterceptor GetInterceptor(IAdvisor advisor)
        {
            IAfterReturningAdvice advice = (IAfterReturningAdvice)advisor.Advice;

            return(new AfterReturningAdviceInterceptor(advice));
        }
示例#25
0
        public void CanApplyWithAdvisorYieldsTrueIfAdvisorIsNotKnownAdvisorType()
        {
            IAdvisor advisor = A.Fake <IAdvisor>();

            Assert.IsTrue(AopUtils.CanApply(advisor, typeof(TestObject), null));
        }