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);
        }
예제 #2
0
        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);
 }