.NET :訊息與AOP(一)

來源:互聯網
上載者:User
方法調用與訊息

如果一個目標對象委託給一個真實代理執行個體,那麼所有對對應的透明代理的方法調用都會經過一個訊息轉換與反轉換的過程,而
正是將方法調用轉換為訊息後,我們才有機會實現預(後)處理,這樣更進一步的結果是 ==》 實現所謂的AOP。

1. 真實代理:從RealProxy派生,最主要的是複寫Invoke方法。Invoke方法的主要職能是為截獲方法調用加上預(後)處理,以
此來實現AOP。
(1) 一種真實代理類型就表示一種特定的預(後)處理,如果一個類希望自己的公用方法被外界調用時進行適當的預先處理或後處理,
那麼該類可以將自己的執行個體委託給有此預(後)處理功能的真實代理。
(2) 真實代理執行個體與透明代理執行個體是一一對應的。不存在透明代理的類,但是卻可以從真實代理執行個體得到透明代理。
(3) 透明代理:將方法調用轉換為訊息(實際被轉換的是堆疊框架)。針對透明代理調用目標對象的方法,會被最終轉寄到目標對象
上。在使用層面上來看,可以將透明代理當作目標對象本身。
(4) Stack Builder Sink :將訊息轉換為方法調用,並返回調用結果給代理,再由代理將結果轉為響應訊息通過RPC傳遞,然後
在將響應訊息轉換為調用後的堆棧,這樣原調用方便可得到調用結果。
(5) 針對不同的預(後)處理,可以定義不同的真實代理類型。

2. 如果一個類(比如class Example)希望外界調用它的公用方法(包括ctor)時,通過代理來完成(主要目的是實現某種特定
的預/後處理),那麼有兩種方法來實現:
(1) 將Example以Factory 方法的模式實現,這樣在其static Instance方法中,可以將一個新執行個體的引用委託給一個實現特定預先處理和
後處理的真實代理。接著將該代理的透明代理強制轉換為該類引用,並返回它。此處情況下,真實代理類型僅需從RealProxy一
個類派生。
(2) 通過代理特性(一種特殊的真實代理)實現。
首先,代理屬性類別型必須從ProxyAttribute派生,此時有兩個方法需要複寫,一個是Invoke方法,另一個是CreateInstance方法。
u Example必須ContextBoundObject派生,即Example必須為一個上下文綁定對象,另外,為Example類加上代理特性。
注意,對不是從ContextBoundObject類派生的類實施上下文特性(即代理特性)。
u 在該情況下,對象啟用(即new Example時)被分為兩個階段,首先調用真實代理的CreateInstance方法,產生一個未初始化的對象;
接著在將ctor轉寄給真實代理的Invoke方法。

注意:(1)和(2)的比較:(1)中將目標對象委託給代理是Example自己的職責,而(2)中把該職責轉移到代理中去了。



1. 上下文特性修飾一個類,以後每次new這個類產生對象時,都將對象放入相應的上下文中。
2. 上下文特性與內容屬性通常是一一對應的。
3. 上下文特性在建立時將內容屬性添加到上下文中,更確切說,是這樣的,上下文特性檢查當前上下文中
是否存在要添加的屬性,並且存在的屬性值與要添加的屬性值是否相等,如果兩者都滿足,則直接在該上
下文中建立新執行個體。否則,上下文特性將要求對象ctor建立一個新的上下文包含所要添加的屬性。
4. 一個上下文可以包含多個不同的內容屬性,每一組確定的內容屬性值即可確定一個上下文。

5. 訊息接收器本身可以作為任何種類的接收器,關鍵是看內容屬性將其安排為何種接
收器(如,信使接收器,伺服器上下文接收器)

內容屬性向訊息接收器鏈中插入訊息接收器的兩種方式:
(1)僅僅發布公用屬性 P240
(2) 實現某些類型的接收器介面(如信使接收器),然後將某個(些)訊息接收器對象確認為對應的接收器介面類型。P349

注意:上下文(context)是存在於當前應用域中的,用於將該上下文中的屬性轉換為接收器插入到該上下文中的對象的方法調用過程中。
而調用上下文(call context)是存在於訊息接收器鏈中的,用於在鏈中傳遞資訊。



相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

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

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