我们正在我们的一个项目中引入PostSharp。到目前为止,它一直工作得很好!但是有一件事我们还没有解决:如何有条件地发出通知。
细节:-我们有一个StopWatchAttribute属性,它可以记录运行方法所需的时间-该属性接受一个枚举"LoggingLevel",它在配置文件中设置为0、1、2等值-该参数在运行时从一个名为BaseService的基类中读取:new BaseService()。CurrentLoggingSettings-我们尝试设置属性构造函数StopWatchAttribute(new BaseService(). currentlogginglevel),但我们得到一个编译错误:属性参数必须是一个常量表达式,typeof表达式或一个属性参数类型的数组创建表达式。
——> summary:我们希望有条件地调用通知,而条件取决于属性构造函数中的形参。
这是可能的吗?
谢谢你的帮助,安德拉斯
你不能给属性赋变量,不管是否PostSharp。由于您已经从配置中读取了值,因此只需在Initialize()方法上设置方面以执行相同的操作。在方面类中重写它,然后将值保存到本地字段。您可以在整个方面中使用该字段。这将值编译到方面中,实际上是对其进行硬编码。
或者,你可以从你的建议方法(OnMethodStart等)中提取配置中的值,以便你可以在运行时在配置中更改它。这是一种更"灵活"的方式,因为它没有硬编码任何东西。
记住,你的变量是在运行时设置的。PostSharp是一个后编译框架,这意味着它在你的变量被JIT知道之前就开始工作了。