最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#開源的AOP框架--KingAOP基礎(chǔ)

 更新時間:2015年12月10日 09:43:12   作者:JackWang-CUMT  
這篇文章主要介紹了一款C#開源的AOP框架--KingAOP框架的基礎(chǔ)知識,對于想學(xué)習(xí)AOP的小伙伴來說,非常不錯,希望大家能夠喜歡。

  AOP面向切面編程(Aspect Oriented Programming),是通過預(yù)編譯方式和運行期動態(tài)代理實現(xiàn)程序功能的統(tǒng)一維護的一種技術(shù)。Spring框架用的核心技術(shù)就是AOP,是函數(shù)式編程的一種衍生范型。利用AOP的好處就是可以對業(yè)務(wù)邏輯進行隔離,降低耦合度,提高程序的可重用性,同時提高了開發(fā)的效率。開源的AOP也有不少,我這里用的KingAOP.

1 項目結(jié)構(gòu)

2 定義一個日志記錄的實體類User和LoggingAspect切面日志類

namespace AOPDemo.Logging
{
 class User
 {
  public int ID { get; set; }
  public string Name { get; set; }
  public string Pwd{get;set;}
  public string IP { get; set; }
  public string State { get; set; }
  public System.DateTime LoginTime { get; set; }

 }
}

 

using System;
using System.Text;
using KingAOP.Aspects;

namespace AOPDemo.Logging
{
 internal class LoggingAspect : OnMethodBoundaryAspect
 {
  public override void OnEntry(MethodExecutionArgs args)
  {
   string logData = CreateLogData("Entering", args);
   Console.WriteLine(logData);
  }

  public override void OnExit(MethodExecutionArgs args)
  {
   string logData = CreateLogData("Leaving", args);
   Console.WriteLine(logData);
  }
  /// <summary>
  /// AOP對于登錄日志邏輯,只需在此進行修改即可,無需修改被切面的處理類
  /// </summary>
  /// <param name="methodStage"></param>
  /// <param name="args"></param>
  /// <returns></returns>
  private string CreateLogData(string methodStage, MethodExecutionArgs args)
  {
   var str = new StringBuilder();
   str.AppendLine();
   str.AppendLine(string.Format(methodStage + " {0} ", args.Method));
   foreach (var argument in args.Arguments)
   {
    var argType = argument.GetType();

    str.Append(argType.Name + ": ");

    if (argType == typeof(string) || argType.IsPrimitive)
    {
     str.Append(argument);
    }
    else
    {
     foreach (var property in argType.GetProperties())
     {
      str.AppendFormat("{0} = {1}; ",
       property.Name, property.GetValue(argument, null));
     }
    }
   }
   return str.ToString();
  }
 }
}

3 Login類

該類必須實現(xiàn)IDynamicMetaObjectProvider的GetMetaObject方法,同時在需要切面的方法上用屬性[LoggingAspect]進行標注,LoggingAspect屬性也就是我們上面定義的LoggingAspect切片處理類.

using System.Dynamic;
using System.Linq.Expressions;
using KingAOP;
namespace AOPDemo.Logging
{
 /// <summary>
 /// 登錄邏輯處理,只需添加一個LoggingAspect即可實現(xiàn)日志功能,達到邏輯和通用處理的邏輯分離
 /// </summary>
 internal class Login : IDynamicMetaObjectProvider
 {
  //添加登錄切面
  [LoggingAspect] 
  public void LoginValdate(User entity)
  {
   //只需進行業(yè)務(wù)邏輯處理,無需進行日志處理
   if (entity.Name == "jack" && entity.Pwd == "wang")
   {
    entity.State = "Logged";
   }
   else
   {
    entity.State = "Error";
   }
   

  }
  /// <summary>
  /// IDynamicMetaObjectProvider的實現(xiàn)
  /// </summary>
  /// <param name="parameter"></param>
  /// <returns></returns>
  public DynamicMetaObject GetMetaObject(Expression parameter)
  {
   //need for AOP weaving
   return new AspectWeaver(parameter, this);
  }
 }
}

調(diào)試代碼如下:

//測試感覺KingAOP必須有一個dynamic才能切面
Logging.Login test = new Logging.Login();
dynamic entity = new Logging.User { Name = "Jon", ID = 99,Pwd="wang",State="",LoginTime=System.DateTime.Now};
test.LoginValdate(entity);

相關(guān)文章

  • c# 提取文檔信息的示例

    c# 提取文檔信息的示例

    這篇文章主要介紹了c# 提取文檔信息的示例,幫助大家更好的理解和學(xué)習(xí)c#,感興趣的朋友可以了解下
    2021-02-02
  • C#如何提取經(jīng)緯度文件中的經(jīng)緯度數(shù)據(jù)

    C#如何提取經(jīng)緯度文件中的經(jīng)緯度數(shù)據(jù)

    近期開發(fā)時需要獲取當前的經(jīng)緯度坐標,下面這篇文章主要給大家介紹了關(guān)于C#如何提取經(jīng)緯度文件中經(jīng)緯度數(shù)據(jù)的相關(guān)資料,文中通過圖文介紹的非常詳細,需要的朋友可以參考下
    2022-08-08
  • c# 識別圖片格式的方法

    c# 識別圖片格式的方法

    這篇文章主要介紹了c# 識別圖片格式的方法,幫助大家更好的理解和學(xué)習(xí)使用c#,感興趣的朋友可以了解下
    2021-02-02
  • c# WinForm 窗體之間傳值的幾種方式(小結(jié))

    c# WinForm 窗體之間傳值的幾種方式(小結(jié))

    這篇文章主要介紹了WinForm 窗體之間傳值的幾種方式(小結(jié)),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-09-09
  • C# Winform實現(xiàn)石頭剪刀布游戲

    C# Winform實現(xiàn)石頭剪刀布游戲

    這篇文章主要為大家詳細介紹了Winform實現(xiàn)石頭剪刀布游戲,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • C#實現(xiàn)跑馬燈效果的示例代碼

    C#實現(xiàn)跑馬燈效果的示例代碼

    跑馬燈效果,功能效果大家應(yīng)該都知道,就是當我們的文字過長,整個頁面放不下的時候(一般用于公告等),可以讓它自動實現(xiàn)來回滾動。本文將利用C#實現(xiàn)這一效果,感興趣的可以了解一下
    2022-11-11
  • C#讀取QQ純真IP數(shù)據(jù)庫QQWry.Dat的代碼

    C#讀取QQ純真IP數(shù)據(jù)庫QQWry.Dat的代碼

    QQ純真IP庫算是IP地址收集較為全的一個IP庫,對于IP查詢來說這個是不錯的選擇。下面是如何查詢純真IP庫的一個類,使用C#代碼。
    2007-03-03
  • C#實現(xiàn)中文驗證碼的示例代碼

    C#實現(xiàn)中文驗證碼的示例代碼

    這篇文章主要為大家詳細介紹了如何利用C#實現(xiàn)中文驗證碼功能,文中的示例代碼講解詳細,對我們學(xué)習(xí)C#有一定的幫助,感興趣的小伙伴可以了解一下
    2022-12-12
  • 深入解析C#設(shè)計模式中對橋接模式的具體運用

    深入解析C#設(shè)計模式中對橋接模式的具體運用

    這篇文章主要介紹了C#設(shè)計模式中對橋接模式的具體運用,橋接模式所強調(diào)的解耦在代碼維護中非常有用,需要的朋友可以參考下
    2016-02-02
  • C#使用private font改變PDF文件的字體詳解

    C#使用private font改變PDF文件的字體詳解

    這篇文章主要給大家介紹了關(guān)于C#使用private font改變PDF文件的字體的相關(guān)資料,文中通過示例代碼以及圖片介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-07-07

最新評論

宜阳县| 绥芬河市| 博乐市| 重庆市| 开原市| 楚雄市| 乳山市| 兴安盟| 崇明县| 万安县| 汉川市| 澄江县| 凤城市| 延吉市| 邓州市| 大埔县| 禹州市| 沙雅县| 白水县| 广州市| 灵璧县| 开原市| 尖扎县| 宜黄县| 油尖旺区| 武义县| 磐安县| 白玉县| 筠连县| 盘山县| 岳阳市| 曲靖市| 卢龙县| 晋宁县| 随州市| 郓城县| 山东省| 如东县| 舒兰市| 阳春市| 山丹县|