使用属性向方法添加参数

时间:2012-04-18 20:46:43

标签: c# aop custom-attributes

不可否认,这是一个很长的镜头。我正在编写审计文件,您可以在操作开始和结束时打开和关闭审计记录。我已经很好地装配好了,所以为了审计一个方法,你只需要在它上面添加一个[Audit(AuditType.Something)]属性,如果需要还可以添加一些其他信息,比如消息。然后,使用SNAP,我有一个拦截器来处理创建Audit对象,然后打开和关闭它。

来自同事的一个案例,我们需要在审计中发出非常量的消息,这意味着它不能进入​​属性声明。我已经考虑过在类中保留一个Audit属性并让注入器在让方法继续之前设置它,但这看起来很草率,因为非审计对象可以访问该属性,而且它会在很多方面被复制。地方。还有一些方法可以在没有属性的情况下创建审计,但是能够将事物很好地包装在属性中会更好。

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

1 个答案:

答案 0 :(得分: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,然后调用相关方法。