欧美大屁股bbbbxxxx,狼人大香伊蕉国产www亚洲,男ji大巴进入女人的视频小说,男人把ji大巴放进女人免费视频,免费情侣作爱视频

歡迎來到入門教程網(wǎng)!

C#教程

當(dāng)前位置:主頁(yè) > 軟件編程 > C#教程 >

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

來源:本站原創(chuàng)|時(shí)間:2020-01-10|欄目:C#教程|點(diǎn)擊: 次

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

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

2 定義一個(gè)日志記錄的實(shí)體類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對(duì)于登錄日志邏輯,只需在此進(jìn)行修改即可,無需修改被切面的處理類
  /// </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類

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

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

  }
  /// <summary>
  /// IDynamicMetaObjectProvider的實(shí)現(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)試代碼如下:

//測(cè)試感覺KingAOP必須有一個(gè)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);

上一篇:C#怎么實(shí)現(xiàn)手機(jī)短信發(fā)送功能

欄    目:C#教程

下一篇:詳解C#打開和關(guān)閉可執(zhí)行文件

本文標(biāo)題:C#開源的AOP框架--KingAOP基礎(chǔ)

本文地址:http://mengdiqiu.com.cn/a1/C_jiaocheng/6793.html

網(wǎng)頁(yè)制作CMS教程網(wǎng)絡(luò)編程軟件編程腳本語(yǔ)言數(shù)據(jù)庫(kù)服務(wù)器

如果侵犯了您的權(quán)利,請(qǐng)與我們聯(lián)系,我們將在24小時(shí)內(nèi)進(jìn)行處理、任何非本站因素導(dǎo)致的法律后果,本站均不負(fù)任何責(zé)任。

聯(lián)系QQ:835971066 | 郵箱:835971066#qq.com(#換成@)

Copyright © 2002-2020 腳本教程網(wǎng) 版權(quán)所有