要向我们的应用程序添加审计跟踪,我们决定使用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?
答案 0 :(得分:3)
不,你今天不能。
但是 - 这听起来很不错。请在这里添加一张关于它的JIRA票 http://nhibernate.jira.com/browse/NHE
如果没有太多的想法,我认为让用户只使用属性配置来实现这一点是非常困难的(如果是这样的话,需要在内部构建一些IoC)。可能它可以通过允许注入修订侦听器单例“接近IntegrateWithEnvers方法”来实现。
此致 罗杰