首先 建一个抽象类
public abstract class AopAbs
{
// fun_name 方法名
// parameters 方法参数
public abstract void ExecingExecuting(string fun_name, object[] parameters); //方法前
public abstract void ExecingExecuted(string fun_name, object[] parameters); //方法前
public R AopFucion<T, R>(string fun_name, object[] parameters)
{
ExecingExecuting(fun_name, parameters); //方法前
R re = runFuc<T, R>(fun_name, parameters); // 当前方法
ExecingExecuted(fun_name, parameters); //方法后
return re;
}
public R runFuc<T, R>(string fun_name, object[] parameters)
{
R re;
var t = typeof(T);
T obj = (T)Activator.CreateInstance(t);
var get_fun = t.GetMethod(fun_name);
if (parameters == null) re = (R)get_fun.Invoke(obj, null);
else re = (R)get_fun.Invoke(obj, parameters);
return re;
}
}
然后 两个实现类 Aop1 ,Aop2
public class AOP1 : AopAbs
{
public override void ExecingExecuted(string fun, object[] parameters)
{
Console.WriteLine("这是方法前 1 ");
}
public override void ExecingExecuting(string fun, object[] parameters)
{
Console.WriteLine("这是方法后 1 ");
}
}
public class AOP2 : AopAbs
{
public override void ExecingExecuted(string fun, object[] parameters)
{
Console.WriteLine("这是方法前 2 ");
}
public override void ExecingExecuting(string fun, object[] parameters)
{
Console.WriteLine("这是方法后 2 ");
}
}
调用 方式
// ExecuteNonQuery 为方法名
// parameters 方法 参数
object[] parameters = new object[] { id, sql };
AOP1 aOP = new AOP1();
return aOP.AopFucion<SqlBaseHelpre, int>("ExecuteNonQuery", parameters);