通过DI配置Envers RevisionListener
为了向我们的应用程序添加审计跟踪,我们决定使用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?
不,你今天不能。
然而 – 这听起来像一个很好的function。 请在http://nhibernate.jira.com/browse/NHE上添加一张关于它的JIRA门票
在没有给出太多想法的情况下,我认为让用户仅使用属性配置来实现这一点是非常困难的(如果是这样的话,需要在内部构建一些IoC)。 可能它可以通过允许注入修订侦听器单例“接近IntegrateWithEnvers方法的某个地方”来实现。
关心罗杰
- 如何使用Dynamic LINQ使用GroupBy
- ASP.NET应用程序页面不适用于客户端计算机
- 如何在ListBox中的每个ListBoxItem之间放置一个分隔符?
- 使用MVVM在TreeView中显示实体
- 将Access DB表加载到Datatable
- IoC – 多个实现支持单个接口
- 如何在Entity Framework中使用条件聚合sql查询?
- 当DbDataAdapter.Update调用时,为什么我使用ODP.NET OracleDataAdapter获取OracleTruncateException而不使用System.Data.OracleClient的适配器?
- 我的应用程序失败时如何通知Windows任务计划程序?