4

为了向我们的应用程序添加审计跟踪,我们决定使用 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;
  }
}

EnversRevisionListener根据RevisionEntity您的班级装饰的属性决定使用哪种:

[RevisionEntity( typeof( RevisionListener ) )]

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

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

4

1 回答 1

3

不,你今天不能。

但是 - 这听起来像是一个不错的功能。请在此处添加有关它的 JIRA 票 http://nhibernate.jira.com/browse/NHE

如果不考虑太多,我认为让用户仅使用属性配置来执行此操作将非常困难(如果是这样,则需要在内部构建某种 IoC)。可能它可以通过允许在“接近 IntegrateWithEnvers 方法的某个地方”注入修订监听器单例来完成。

问候罗杰

于 2011-08-03T12:27:33.443 回答