【问题标题】:Adding a parameter to a method using attributes使用属性向方法添加参数
【发布时间】:2016-03-25 22:53:31
【问题描述】:

诚然,这是一个远射。我正在做一个审计工作,您可以在操作开始和结束时打开和关闭审计记录。我已经很好地安装了它,因此为了审计一个方法,你只需要在它上面添加一个[Audit(AuditType.Something)] 属性,如果需要的话,加上一些其他信息,比如消息。然后,使用 SNAP,我有一个拦截器来处理创建审计对象,然后打开和关闭它。

同事提出一个案例,我们需要在审核中包含非常量消息,这意味着它不能进入​​属性声明。我曾想过在类中保留一个 Audit 属性并在让方法继续之前让注入器设置它,但这似乎很草率,因为该属性可以被非审计对象访问,而且它会在很多中重复地方。也有一些方法可以在没有属性的情况下创建审核,但是能够将内容很好地包装在属性中会更好。

理想的情况是,如果我能以某种方式对其进行设置,以便具有[Audit] 属性的方法可以访问一个变量,我可以将其审计对象从注入器中插入。这是完全可能的,还是只是一厢情愿?

【问题讨论】:

    标签: c# aop custom-attributes


    【解决方案1】:

    如果您的 Audit 属性采用 Type 类型的参数,其中提供的 Type 实现了生成您的审核消息的接口,该怎么办?例如:

    public interface IAuditMessageProvider {
        public String MakeMeAnAuditMessage(/* some args perhaps */);
    }
    
    public class PiAuditMessageProvider : IAuditMessageProvider {
        public String MakeMeAnAuditMessage() { return "3.14"; }
    }
    
    [Audit(typeof(PiAuditMessageProvider))]
    public void myMethod { ... }
    

    然后您可以使用Activator.CreateInstance 实例化提供的类型,将其转换为IAuditMessageProvider,然后调用相关方法。

    【讨论】:

      猜你喜欢
      • 2015-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-13
      • 1970-01-01
      • 2012-08-06
      相关资源
      最近更新 更多