アプリケーションに監査証跡を追加するために、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に挿入する別の柔軟な方法はありますか?