You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在自定义Method Attribute中获取方法调用时传入的参数?

结论:不能直接在自定义特性内部实现这个需求

核心原因

特性本质是编译期嵌入程序集元数据的标记,它的实例化和代码执行时机完全独立于方法调用:

  • 特性不会在方法被调用时自动触发执行,只有当你通过反射显式获取该特性时,它的代码才会运行
  • 就算你在特性里写了获取调用栈的代码,此时的调用栈是反射获取特性的栈,而非MyMethod被调用时的栈,根本拿不到目标方法的参数

可行的替代方案

  • 用AOP拦截器实现:借助Autofac、Castle DynamicProxy这类AOP框架,定义方法拦截器。拦截器可以在方法执行前后拿到完整的调用上下文,包括传入的参数,效果和你预想的一致,但这是框架帮你完成的拦截,不是特性本身的能力。
  • 方法内部手动触发:在MyMethod内部,通过反射获取自身的MyAttribute,然后把参数主动传给特性的处理方法,比如:
[MyAttribute]
public void MyMethod(SomeClass prop) {
    var attr = typeof(MyClass).GetMethod(nameof(MyMethod))
        .GetCustomAttribute<MyAttribute>();
    attr.ProcessParameter(prop);
    // 原有逻辑
}
  • 诊断追踪方案:如果是监控场景,可以用.NET的DiagnosticSource,在方法调用时发布包含参数的诊断事件,后续再消费这些事件,但这个更偏向于日志/监控,不是实时处理参数。

内容的提问来源于stack exchange,提问作者johnny 5

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 09:12:36