C# aop

來源:互聯網
上載者:User

標籤:response   對象   透明代理   sed   技術   問題   override   構造器   creat   

  AOP思想是為了處理應用程式中摻雜的一些非問題域相關的程式碼片段,比如 日誌記錄,異常處理等一些跨問題域的通用程式碼片段。AOP的重點在於提供一種處理機制將應用程式分離成多個塊,主要是 問題域塊和通用處理方法塊。

  AOP主要好處

一 .問題域處理不用一些無關處理代碼汙染。

二.通用處理代碼重用度高

實現方式

    一.透明代理    remoting技術在core中不被支援。

     原理:AOP實現的是對方法的攔截調用,方法本質上就是CLR堆棧上進行記憶體轉換,調用方通過方法表找到方法堆棧地址,按照參數格式把參數壓入堆棧,方法處理堆棧參數,重寫堆棧標識處理結果。

      CLR提供了一種方法轉訊息的能力---透明代理;透明代理是由CLR建立的一種特別對象,它的存在只是為了將方法調用轉成訊息。System.Runtime.remoting 下定義了訊息處理的眾多介面。

    透明代理對象非常特殊,不能繼承或者通過構造器建立透明代理對象,它和真實代理存在一一對應關係,只能通過真實代理的方法得到透明代理。

    通過透明代理調用的方法,CLR會截獲並進行檢查,滿足跨域調用就會將方法堆棧轉換成訊息對象,並轉寄到真實代理對象上進行處理。

   實現步驟: 1.定義真實代理

public class ExcetionProxy : RealProxy    {        /// <summary>        /// 代理執行的真實對象        /// </summary>        readonly MarshalByRefObject mtarget;        public ExcetionProxy(MarshalByRefObject target, Type t) : base(t)        {            this.mtarget = target;        }        /// <summary>        /// 方法訊息截獲        /// </summary>        /// <param name="msg"></param>        /// <returns></returns>        public override IMessage Invoke(IMessage msg)        {            IMethodCallMessage call= (IMethodCallMessage)msg;            Console.Write(" 方法執行之前"+ call.MethodName+"\n");            try            {                IMessage response = RemotingServices.ExecuteMessage(mtarget, call);//執行代理方法                return response;            }            catch (Exception ex)            {                throw;            }            finally {                Console.Write(" Excetion Process Success");            }                    }    }
View Code

   2. 代理的透明轉換

    真實處理對象必須繼承 MarshalByRefObject,MarshalByRefObject作用是對對象打標籤,表示對象方法不能夠被CLR在編譯時間做最佳化處理.

   

    public class MyExcObject : MarshalByRefObject    {        public static MyExcObject Create()        {            MyExcObject target = new MyExcObject();            ExcetionProxy rp = new ExcetionProxy(target, typeof(MyExcObject));            return (MyExcObject)rp.GetTransparentProxy();        }        private MyExcObject() { }        public Double Add(double x,double y) { return x + y; }    }

 

C# aop

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.