# 应用切面
AspectAttribute 用于将一个切面处理器挂载到指定方法。处理器必须实现 IAspectExecuteHandler 或 IAspectAroundHandler;框架在启动时通过 AddAspect() 扫描方法特性并注册处理器。
# 基本用法
using Air.Cloud.Core.Modules.AppAspect.Attributes;
using Air.Cloud.Core.Modules.AppAspect.Handler;
public sealed class AuditAspect : IAspectExecuteHandler
{
public void Execute_Before(MethodInfo methodInfo, object[] args)
{
}
public void Execute_After(MethodInfo methodInfo, object result)
{
}
}
public sealed class OrderApplicationService
{
[Aspect(typeof(AuditAspect))]
public void Create(string orderNo)
{
}
}
# 多切面顺序
可在第二个构造参数中设置 Order,默认值为 1。数值越大,优先级越高:
- 对
IAspectAroundHandler,前置逻辑按Order升序执行,后置逻辑按降序执行。 - 扫描阶段保存的切面元数据按
Order降序排列。 - 相同
Order不应承载依赖先后关系;请使用不同的数值表达明确优先级。
[Aspect(typeof(ValidationAspect), 10)]
[Aspect(typeof(AuditAspect), 20)]
public void Create(string orderNo)
{
}
上述配置中,ValidationAspect 的环绕前置逻辑先执行,AuditAspect 的环绕后置逻辑先执行。IAspectExecuteHandler 的执行前后回调会按扫描后的元数据顺序处理,即较大的 Order 优先,因此需要依赖固定先后关系时,应使用不同的 Order 值并通过测试验证。
# 适用边界
[Aspect] 适合方法级的参数校验、审计、异常记录等规则。HTTP 请求级的 CORS、响应头、全局异常响应等行为仍应使用 ASP.NET Core Middleware 或 MVC Filter。