通过 DI 配置 Envers RevisionListener

发布于 2024-11-27 03:17:45 字数 852 浏览 2 评论 0原文

为了向我们的应用程序添加审计跟踪,我们决定使用 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 根据您的类所装饰的 RevisionEntity 属性来决定使用哪个 RevisionListener

[RevisionEntity( typeof( RevisionListener ) )]

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

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

To add an audit trail to our application we decided to use NHibernate.Envers. To allow app specific tracking of revisions, the DefaultRevisionEntity was extended with user specific data.

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 decides wich RevisionListener to use depending on the RevisionEntity attribute your class is decorated with:

[RevisionEntity( typeof( RevisionListener ) )]

I am using the ServiceLocator pattern to inject my accessor into the RevisionListener. Currently this is the only place where I have to use a ServiceLocator and really want to get rid of it.

Is there another, flexible way to inject my UserAccessor into the RevisionEntity?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

我ぃ本無心為│何有愛 2024-12-04 03:17:45

不,今天不能。

然而,这听起来是一个不错的功能。请在此处添加有关此问题的 JIRA 票证
http://nhibernate.jira.com/browse/NHE

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

问候
罗杰

No, you can't today.

However - it sounds like a nice feature. Please add a JIRA ticket about it here
http://nhibernate.jira.com/browse/NHE

Without giving it too much thoughts, I think it'll be pretty hard to enable users to do this with only attribute configuration though (if so, sort of an IoC needs to be built internally). Probably it can be accomplished by allowing to inject a revision listener singleton "somewhere close to IntegrateWithEnvers method".

Regards
Roger

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文