2013-10-29 81 views
0

我想记录方法的条目。在入口日志中,我将拥有该方法接收的输入\参数。这必须为数千种方法完成。使用属性读取方法参数

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

是否可以通过属性读取方法参数? ,调用该装饰有一个属性的方法的代码

+1

这不是常规C#/ .NET支持的东西;有像后期那样的第三方工具允许这样的事情,但是:这是跨出C# –

+0

实际上,有一些方法可以根据您的架构来做到这一点。这是一个MVC4项目还是你想自己设计这样的系统?根据你的答案,我可以给你详细的信息。 – Aidin

回答

1

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

1
  1. 属性不是“方法调用之前烧制”可以(或者可以不)做基于所述属性的存在的东西。

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