我致力于一种新型的 AOP 框架,以应对现有 AOP 框架缺失的特性。你可以在这里找到我的开源项目:NConcern .NET AOP Framework
与其他人的区别之一是允许您使用 System.Linq.Expression 开发您的建议,以避免基于类型的装箱/拆箱、反射和哈希跳转。对于初学者来说使用 Expression 进行开发有点困难,但对于高级开发人员来说却很容易。
Example 一个简单的日志记录示例(进入控制台),无需重写您的业务、反射和装箱。
一个企业:计算器
public class Calculator
{
public int Add(int a, int b)
{
return a + b;
}
}
您的日志记录方面由 linq 表达式实现,以描述 Advice 必须如何工作。
public class Logging : IAspect
{
//this is not an advice, this method is called to produce advices
public IEnumerable<IAdvice> Advise(MethodInfo method)
{
//generic presentation method
var presentation = typeof(Presentation). GetMethod("Of");
//example log on exception
//instance, arguments and exception are Expressions
yield return Advice.Linq.After.Throwing((instance, arguments, exception) =>
{
Expression.Call
(
typeof(Console).GetMethod("WriteLine",...),
Expression.Call
(
typeof(string).GetMethod("Concat", new Type[] { typeof(string[]) }),
Expression.NewArrayInit(typeof(string), arguments.Select(argument => argument.Type == typeof(string) ? argument : ...).ToArray())
)
)
}
}
}