2

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

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

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

4

1 回答 1

1

如果您的 Audit 属性采用 type 的参数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,然后调用相关方法。

于 2012-04-18T20:53:17.103 回答