I'am using NHibernate and envers in a .net 5 web application, i need to add user id to default revision entity and find no way to use dependency injection to do it.
this is envers configuration
private static void SetupEnvers(NHibernate.Cfg.Configuration cfg)
{
var enversConf = new NHibernate.Envers.Configuration.Fluent.FluentConfiguration();
enversConf.Audit<Persona>();
IRevisionListener revListner = new EnversRevisionListener(new IUserManagement);
enversConf.SetRevisionEntity<RevisionEntity>(e => e.Id, e => e.RevisionDate, revListner);
cfg.SetEnversProperty(ConfigurationKey.AuditTableSuffix, "_LOG");
cfg.SetEnversProperty(ConfigurationKey.AuditStrategy, typeof(CustomValidityAuditStrategy));
cfg.IntegrateWithEnvers(enversConf);
}
Problem is IRevisionListener revListner = new EnversRevisionListener(new IUserManagement);
how can i inject the UserManagement?
i found this topics https://nhibernate.jira.com/browse/NHE-17 but how can i use it?
this is my custom revision entity:
public class RevisionEntity : DefaultRevisionEntity
{
public virtual string IdUtente { get; set; }
public virtual string? IdUtenteImpersonato { get; set; }
}
public class EnversRevisionListener : IRevisionListener
{
IUserManagement um = null;
public EnversRevisionListener(IUserManagement ium) : base()
{ um = ium; }
public void NewRevision(object revisionEntity)
{
var casted = revisionEntity as RevisionEntity;
if (casted != null)
{
casted.IdUtente = um.GetUtenteCorrente().Id;
casted.IdUtenteImpersonato = um.GetUtenteCorrente().UtenteImpersonato.Id;
}
}
}
this is nhibernate config
public static IServiceCollection AddNHibernate(this IServiceCollection services, bool genereteDB = false)
{
_sessionFactory = Fluently.Configure()
.Database(OracleManagedDataClientConfiguration.Oracle10
.ConnectionString(DbSettings.Current.ConnectionStrings.AbilioDB)
.DoNot.ShowSql()
.DoNot.FormatSql())
.Mappings(m => m.FluentMappings.AddFromAssembly(Assembly.GetExecutingAssembly())
.Conventions.AddFromAssemblyOf<UnitOfWork>()
)
.ExposeConfiguration(config => SetupEnvers(config))
.ExposeConfiguration(config => new SchemaUpdate(config).Execute(false, true))
.BuildSessionFactory();
services.AddSingleton(_sessionFactory);
services.AddScoped(factory => _sessionFactory.OpenSession());
services.AddScoped<IUnitOfWorkFactory, UnitOfWorkFactory>();
services.AddScoped<IUnitOfWork, UnitOfWork>();
return services;
}