Ejemplo n.º 1
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());
        }