private static void addListeners(Configuration cfg, AuditEventListener auditEventListener) { var listeners = new[] { auditEventListener }; cfg.AppendListeners(ListenerType.PostInsert, listeners); cfg.AppendListeners(ListenerType.PostUpdate, listeners); cfg.AppendListeners(ListenerType.PostDelete, listeners); cfg.AppendListeners(ListenerType.PostCollectionRecreate, listeners); cfg.AppendListeners(ListenerType.PreCollectionRemove, listeners); cfg.AppendListeners(ListenerType.PreCollectionUpdate, listeners); }
public void FixtureSetup() { this.unityContainer = new UnityContainer(); IoC.Initialize( (x, y) => this.unityContainer.RegisterType(x, y), (x, y) => this.unityContainer.RegisterInstance(x, y), (x) => { return(unityContainer.Resolve(x)); }, (x) => { return(unityContainer.ResolveAll(x)); }); // Context Factory NHUnitOfWorkFactory ctxFactory = this.CreateNHContextFactory(); if (!ctxFactory.DatabaseExists()) { ctxFactory.CreateDatabase(); } ctxFactory.ValidateDatabaseSchema(); NHibernate.ISessionFactory sessionFactory = ctxFactory.CreateSessionFactory(); this.unityContainer.RegisterInstance <NHibernate.ISessionFactory>(sessionFactory); this.unityContainer.RegisterInstance <IDatabaseManager>(ctxFactory); this.unityContainer.RegisterInstance <IUnitOfWorkFactory>(ctxFactory); var configuration = IoC.GetInstance <NHibernate.Cfg.Configuration>(); AuditFlushEntityEventListener.OverrideIn(configuration); ValidateEventListener.AppendTo(configuration); AuditEventListener.AppendTo(configuration); TenantEventListener.AppendTo(configuration); var tenantId = Guid.NewGuid(); ApplicationContext.User = new TenantPrincipal(new CoreIdentity("fake", "hexa.auth", "*****@*****.**"), new string[] { }, tenantId); this.unityContainer.RegisterType <ISession, ISession>(new InjectionFactory((c) => { var session = ctxFactory.CurrentSession; var filter = session.EnableFilter("TenantFilter"); filter.SetParameter("tenantId", tenantId); return(session); })); // Repositories this.unityContainer.RegisterType <IEntityARepository, EntityANHRepository>(new PerResolveLifetimeManager()); this.unityContainer.RegisterType <IEntityBRepository, EntityBNHRepository>(new PerResolveLifetimeManager()); }
/// <summary> /// Integrate Envers with NHibernate. /// </summary> /// <param name="configuration">The NHibernate configuration.</param> /// <param name="auditEventListener">The custom implementation for all listeners (better if inherited from <see cref="AuditEventListener"/>>)</param> /// <param name="metaDataProvider">The provider of metadata (attributes, embedded fluent-configuration or custom <see cref="IMetaDataProvider"/> for custom DSL.</param> /// <returns>The NHibernate configuration.</returns> /// <remarks> /// WARNING: Be sure to call this method after set all configuration properties, after have added all your mappings /// and after integrate NHibernate with all others packages as NHibernate.Validator, NHibernate.Search, NHibernate.Spatial. /// </remarks> public static Configuration IntegrateWithEnvers(this Configuration configuration, AuditEventListener auditEventListener, IMetaDataProvider metaDataProvider) { AuditConfiguration.SetConfigMetas(configuration, metaDataProvider); addListeners(configuration, auditEventListener); AuditConfiguration.GetFor(configuration); return(configuration); }