【问题标题】:Configure an Envers RevisionListener via DI通过 DI 配置 Envers RevisionListener
【发布时间】:2011-07-27 15:27:47
【问题描述】:

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

【问题讨论】:

    标签: c# nhibernate spring.net nhibernate-envers


    【解决方案1】:

    不,你今天不能。

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

    如果不考虑太多,我认为让用户仅通过属性配置来执行此操作将非常困难(如果是这样,则需要在内部构建某种 IoC)。可能它可以通过允许在“接近 IntegrateWithEnvers 方法的某个地方”注入一个修订监听器单例来实现。

    问候 罗杰

    【讨论】:

    • Roger 很乐意实施解决方案:nhibernate.jira.com/browse/NHE-17var conf = new FluentConfiguration(); conf.SetRevisionEntity<MyRevisionEntity>(e => e.Number, e => e.TimeStamp, listener); nhConf.IntegrateWithEnvers(new AuditEventListener(), conf);
    • 我有同样的问题,但看不到如何添加对 IUserAccessor 的引用,该引用可以通过 ninject 解决。在示例发布中,我只看到一些“新”作为参考传递,但没有接口参考
    猜你喜欢
    • 1970-01-01
    • 2012-01-21
    • 2021-10-09
    • 1970-01-01
    • 1970-01-01
    • 2014-06-21
    • 2018-01-25
    • 1970-01-01
    • 2014-03-22
    相关资源
    最近更新 更多