通过DI配置Envers RevisionListener

时间:2011-07-27 15:27:47

标签: c# nhibernate spring.net nhibernate-envers

要向我们的应用程序添加审计跟踪,我们决定使用NHibernate.Envers。为了允许应用程序特定的修订跟踪,DefaultRevisionEntity扩展了用户特定数据。

public virtual void NewRevision( object revisionEntity )
{
  var revisionData = revisionEntity as Revision;
  if( revisionData != null )
  {
    // Set additional audit data.
    var identity = UserAccessor.CurrentIdentity;
    revisionData.UserId = identity.UserId;
    revisionData.EmployeeId = identity.EmployeeId;
    revisionData.UserName = identity.Name;
  }
}

Envers决定使用RevisionListener,具体取决于您的课程所使用的RevisionEntity属性:

[RevisionEntity( typeof( RevisionListener ) )]

我正在使用ServiceLocator模式将我的访问者注入RevisionListener。目前,这是我必须使用ServiceLocator并且真正想要摆脱它的唯一地方。

是否有另一种灵活的方式将我的UserAccessor注入RevisionEntity?

1 个答案:

答案 0 :(得分:3)

不,你今天不能。

但是 - 这听起来很不错。请在这里添加一张关于它的JIRA票 http://nhibernate.jira.com/browse/NHE

如果没有太多的想法,我认为让用户只使用属性配置来实现这一点是非常困难的(如果是这样的话,需要在内部构建一些IoC)。可能它可以通过允许注入修订侦听器单例“接近IntegrateWithEnvers方法”来实现。

此致 罗杰