通过DI配置Envers RevisionListener

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

不,你今天不能。

然而 – 这听起来像一个很好的function。 请在http://nhibernate.jira.com/browse/NHE上添加一张关于它的JIRA门票

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

关心罗杰