using attribute来读取方法参数

时间:2013-10-29 15:59:09

标签: c# .net

我想记录方法的条目。在输入日志中,我将获得该方法接收的输入\参数。必须为成千上万的方法做到这一点。

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

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

2 个答案:

答案 0 :(得分:1)

  1. 属性不是“在方法调用之前触发”,调用用属性修饰的方法的代码可能(或可能不)根据属性的存在做某事。

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

答案 1 :(得分:1)

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