我想记录方法的条目。在条目日志中,我将收到该方法接收的输入\参数。这必须为数千种方法完成。
我想过使用 C# ATTRIBUTES 记录输入参数,因为它们在方法调用之前触发。(类似于 MVC 中的 ActionFilters)
是否可以通过属性读取方法参数?
您正在寻找的概念称为面向方面编程 (AOP)。这是一种允许您在应用程序代码中“编织”样板代码块的技术。日志记录就是一个很好的例子。您可以在每个方法调用之前和之后手动实现日志记录(一方面这在大型项目中不可行,另一方面容易出错)。
或者,您可以使用 AOP 框架,它允许您在一个地方定义这些横切功能,并以声明方式将其应用到您的应用程序代码中。有几种方法可以实现这一点;一种是在构建应用程序逻辑之后创建 IL,因此在编译时集成各个方面。一个众所周知的例子是PostSharp. 还有一个免费版本,适合入门。
顺便说一句:PostSharp 严重依赖于属性,所以你走在正确的轨道上。
另一种选择是在运行时集成方面(关键字是拦截)。大多数 IoC 框架都提供此功能。这种方法易于使用,但有一些缺点恕我直言(运行时性能较弱,只能拦截虚拟方法)。
属性不是“在方法调用之前触发”,调用用属性修饰的方法的代码可能(或可能不)根据属性的存在做某事。
属性不知道它所应用的成员,也不能以任何(直接)方式访问它。