Настройте Envers RevisionListener через DI - PullRequest
4 голосов
/ 27 июля 2011

Чтобы добавить контрольный журнал в наше приложение, мы решили использовать 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, которым украшен ваш класс:1007 *

[RevisionEntity( typeof( RevisionListener ) )]

Я использую шаблон ServiceLocator для ввода моего средства доступа в RevisionListener.В настоящее время это единственное место, где я должен использовать ServiceLocator и действительно хочу от него избавиться.

Есть ли другой, гибкий способ внедрить мой UserAccessor в RevisionEntity?

1 Ответ

3 голосов
/ 03 августа 2011

Нет, ты не можешь сегодня.

Однако - это звучит как приятная особенность. Пожалуйста, добавьте билет JIRA об этом здесь http://nhibernate.jira.com/browse/NHE

Не думая слишком много, я думаю, что пользователям будет довольно сложно сделать это только с помощью конфигурации атрибутов (если это так, своего рода IoC должен быть построен внутри). Вероятно, это может быть достигнуто путем введения синглтона прослушивателя ревизий «где-то близко к методу IntegrateWithEnvers».

С уважением Roger

...