国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

基于Remoting透明代理的AOP組件

2019-11-18 17:09:07
字體:
來源:轉載
供稿:網友

   說到AOP在VEVb上也有不少關于實現的文章,所以這次就不描述具體實現;有興趣可以下載組件源碼了解,當然組件只是一個初型并不會有什么強大的功能,也可能存在比較多的問題。

這幾天由于項目移交給測試人員測試,因此空閑的時間比較多;為了不浪費這些時間所以想到用Remoting透明代理機制做一個簡單的AOP組件,順便也學習Remoting中透明代理的實現和運用。剛開始做還是挺痛頭的,因為本機的MSDN并沒有充足的幫助。于是就到VEVb和Google搜了一下,找到一編不錯的文章:http://www.rsdn.ru/article/dotnet/cntxtvsrealPRoxy.xml。把資料整理和清楚一下思路就開始干活。實現過程大概花了一個工作日吧,主要實現了以下對象:

       AopProxyAttribute派生于ProxyAttribute

       AopRealProxyy派生于RealProxy

    /// <summary>

       /// 攔載對象描述接口

       /// </summary>

       public interface ICutiner

       {

              /// <summary>

              /// 執行方法的源對象

              /// </summary>

              object Source

              {

                     get;

                    

              }

              /// <summary>

              /// 執行方法的參數集

              /// </summary>

              object[] Args

              {

                     get;

                    

              }

              /// <summary>

              /// 方法執行前攔載過程

              /// </summary>

              void Executing();

              /// <summary>

              /// 方法執行后攔載過程

              /// </summary>

              /// <param name="returnvalue">返回值</param>

              /// <returns>處理后的返回</returns>

              object Executed(object returnvalue);

              /// <summary>

              /// 實始化攔載對象

              /// </summary>

              /// <param name="source"></param>

              /// <param name="args"></param>

              void initialize(object source,object[] args);

              /// <summary>

              /// 執行方法錯誤信息

              /// </summary>

              Exception Error

              {

                     get;

                     set;

              }

       }

 

制定規則后剩下的工作就整合了,如何把功能整合起來就不說了,對開發人員來說源碼是最好的文檔。

下面讓我們來看下組件在實際使用中的效果。

值驗證

       [AopLibrary.AopProxy]

    public class Product:ContextBoundObject

    {

        public Product()

        {

            //

            //

        }

        private string mName;

        public string Name

        {

            get

            {

                return mName;

            }

            set

            {

                mName = value;

            }

        }

        public void Save()

        {

        }

    }

    如何通過AOP的方式在調用Product對象的Save方法前進行檢查Name值是否合法。可以通過以下方式實現橫向檢測對象:

   public class ValTest:AopLibrary.CutinerAdapter

    {

        public override void Executing()

        {

            Product pr = (Product)Source;

            if(pr.Name == null || pr.Name =="")

            {

                throw(new Exception("請輸入合法的產品名稱!"));

            }

            base.Executing ();

        }

}

       當制定檢測對象后,就可以通過配置文件關聯起來。

       <accepter type="AopTest.validate.Product,AopTest">

        <cutiner method="Save" type="AopTest.validate.ValTest,AopTest" />

    </accepter>

       測試調用代碼:

         try

            {

                validate.Product product = new AopTest.validate.Product();

                product.Name ="cat";

                product.Save();

                Console.WriteLine("Save:OK");

                product = new AopTest.validate.Product();

                product.Save();

               

            }

            catch(Exception e_)

            {

                Console.WriteLine("Exception:"+e_.Message);

            }

統一錯誤處理

   AopLibrary.AopProxy]

    public class DataParse:ContextBoundObject

    {

        public DataParse()

        {

           

        }

        public int ParseInt(string value)

        {

            return int.Parse(value);

        }

        public DateTime ParseDT(string value)

        {

            return DateTime.Parse(value);

        }

    }

   通過AOP的方式統一捕獲ParseInt和ParseDT方法異常并把錯誤信息保存起來。首先是編寫錯誤處理的類:

   public class SaveException:AopLibrary.CutinerAdapter

    {

        public override object Executed(object returnvalue)

        {

            if(Error != null)

            {

                System.IO.StreamWriter writer = new System.IO.StreamWriter("c://errorlog.txt",true,System.Text.Encoding.Default);

                writer.WriteLine(Error.Message);

                writer.Close();

            }

            return base.Executed (returnvalue);

        }

}

       有了處理對象后就通過配置關聯起來.

   <accepter type="AopTest.exception.DataParse,AopTest">

            <cutiner method="ParseDT,ParseInt" type="AopTest.exception.SaveException,AopTest" />

    </accepter>

       配置完成后當運行ParseInt和ParseDT方法時發生錯誤就會把錯誤信息寫到文件中。

下載相關例子和組件源碼

http://henryfan.VEVb.com/archive/2006/06/15/426344.html


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 永胜县| 惠水县| 嫩江县| 万宁市| 平江县| 富平县| 霸州市| 夏津县| 新余市| 法库县| 张掖市| 丽水市| 呈贡县| 罗田县| 博湖县| 漠河县| 玉环县| 西藏| 乌拉特中旗| 瓦房店市| 宜都市| 邵东县| 依安县| 阜宁县| 怀仁县| 贵南县| 洛隆县| 张家界市| 泸州市| 屯昌县| 通渭县| 沁水县| 牟定县| 调兵山市| 南平市| 辉县市| 四子王旗| 元氏县| 宜州市| 遂昌县| 攀枝花市|