使用属性读取方法参数

本文关键字:方法 参数 读取 属性 | 更新日期: 2023-09-27 18:37:15

我想记录方法的条目。在条目日志中,我将有该方法接收的输入''参数。必须为数千种方法执行此操作。

我想使用 C# ATTRIBUTES 对输入参数进行此日志记录,因为它们在方法调用之前触发。 (类似于MVC中的ActionFilters)

是否可以通过属性读取方法参数?

使用属性读取方法参数

您正在寻找的概念称为面向方面编程(AOP)。它是一种允许您在应用程序代码中"编织"样板代码块的技术。日志记录就是一个很好的例子。您可以采取艰难的方式,在每个方法调用之前和之后手动实现日志记录(一方面在大型项目中不可行,另一方面容易出错)。
或者,您可以使用 AOP 框架,该框架允许您在一个位置定义这些横切函数,并以声明方式将其应用于应用程序代码。有几种方法可以实现这一点;一种是在构建应用程序逻辑后创建 IL,从而在编译时集成各个方面。一个众所周知的例子是PostSharp。还有一个免费版本,非常适合开始。
顺便说一句:PostSharp在很大程度上依赖于属性,所以你走在正确的轨道上。
另一种选择是在运行时集成这些方面(关键字是拦截)。大多数 IoC 框架都提供此功能。这种方法易于使用,但恕我直言有一些缺点(运行时性能较弱,只能拦截虚拟方法)。

    属性
  1. 不是"在方法调用之前触发"的,调用用属性修饰的方法的代码可能会(或可能不会)根据属性的存在执行某些操作。

  2. 属性不知道应用它的成员,也无法以任何(直接)方式访问它。