예제 #1
0
 protected virtual void AddBeforeAdvice(string methodName, IBeforeAdvice before)
 {
     lock (this.m_BeforeAdvices)
     {
         if (!m_BeforeAdvices.Contains(methodName))
         {
             m_BeforeAdvices.Add(methodName, before);
         }
     }
 }
        public override void ReadAspect(string aspectXml, string aspectName)
        {
            IBeforeAdvice before = (IBeforeAdvice)ConfigurationXml.GetAdvice(aspectXml, aspectName, AdviceType.Before);

            string[] methodNames = ConfigurationXml.GetNames(aspectXml, aspectName, AdviceType.Before);
            foreach (string name in methodNames)
            {
                AddBeforeAdvice(name, before);
            }
            IAfterAdvice after = (IAfterAdvice)ConfigurationXml.GetAdvice(aspectXml, aspectName, AdviceType.After);

            methodNames = ConfigurationXml.GetNames(aspectXml, aspectName, AdviceType.After);
            foreach (string name in methodNames)
            {
                AddAfterAdvice(name, after);
            }
        }
예제 #3
0
        public IMessage SyncProcessMessage(IMessage msg)
        {
            IMethodCallMessage call       = msg as IMethodCallMessage;
            string             methodName = call.MethodName.ToUpper();
            IBeforeAdvice      before     = FindBeforeAdvice(methodName);

            if (before != null)
            {
                before.BeforeAdvice(call);
            }
            IMessage             retMsg = m_NextSink.SyncProcessMessage(msg);
            IMethodReturnMessage reply  = retMsg as IMethodReturnMessage;
            IAfterAdvice         after  = FindAfterAdvice(methodName);

            if (after != null)
            {
                after.AfterAdvice(reply);
            }
            return(retMsg);
        }