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;
  }
}

Enversは、クラスが装飾されている属性にRevisionListener応じて、どちらを使用するかを決定します。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 に答える