3 Login类
该类必须实现IDynamicMetaObjectProvider的GetMetaObject方法,同时在需要切面的方法上用属性[LoggingAspect]进行标注,LoggingAspect属性也就是我们上面定义的LoggingAspect切片处理类.
using System.Dynamic;
using System.Linq.Expressions;
using KingAOP;
namespace AOPDemo.Logging
{
/// <summary>
/// 登录逻辑处理,只需添加一个LoggingAspect即可实现日志功能,达到逻辑和通用处理的逻辑分离
/// </summary>
internal class Login : IDynamicMetaObjectProvider
{
//添加登录切面
[LoggingAspect]
public void LoginValdate(User entity)
{
//只需进行业务逻辑处理,无需进行日志处理
if (entity.Name == "jack" && entity.Pwd == "wang")
{
entity.State = "Logged";
}
else
{
entity.State = "Error";
}
}
/// <summary>
/// IDynamicMetaObjectProvider的实现
/// </summary>
/// <param name="parameter"></param>
/// <returns></returns>
public DynamicMetaObject GetMetaObject(Expression parameter)
{
//need for AOP weaving
return new AspectWeaver(parameter, this);
}
}
}
调试
//测试感觉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);
注:相关教程知识阅读请移步到c#教程频道。











