不可否认,这是一个很长的镜头。我正在编写审计文件,您可以在操作开始和结束时打开和关闭审计记录。我已经很好地装配好了,所以为了审计一个方法,你只需要在它上面添加一个[Audit(AuditType.Something)]
属性,如果需要还可以添加一些其他信息,比如消息。然后,使用SNAP,我有一个拦截器来处理创建Audit对象,然后打开和关闭它。
来自同事的一个案例,我们需要在审计中发出非常量的消息,这意味着它不能进入属性声明。我已经考虑过在类中保留一个Audit属性并让注入器在让方法继续之前设置它,但这看起来很草率,因为非审计对象可以访问该属性,而且它会在很多方面被复制。地方。还有一些方法可以在没有属性的情况下创建审计,但是能够将事物很好地包装在属性中会更好。
理想的情况是,如果我可以以某种方式进行设置,以便具有[Audit]
属性的方法可以访问我可以将其审计对象从注入器中粘贴的变量。这一切都是可能的,还是只是一厢情愿的想法?
答案 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
,然后调用相关方法。