Exemplo n.º 1
0
        protected void Application_Start()
        {
            // I'm not using areas... no need to register.
            // AreaRegistration.RegisterAllAreas();

            RegisterRoutes(RouteTable.Routes);

            // create a container just to pull in tenants
            var topContainer = new Container();

            topContainer.Configure(config =>
            {
                config.Scan(scanner =>
                {
                    // scan the tenants folder
                    // (For some reason just passing "Tenants" doesn't seem to work, which it should according to the docs)
                    scanner.AssembliesFromPath(Path.Combine(Server.MapPath("~/"), "Tenants"));

                    // pull in all the tenant types
                    scanner.AddAllTypesOf <IApplicationTenant>();
                });
            });

            // create selectors
            var tenantSelector    = new DefaultTenantSelector(topContainer.GetAllInstances <IApplicationTenant>());
            var containerSelector = new TenantContainerResolver(tenantSelector);

            // clear view engines, we don't want anything other than spark
            ViewEngines.Engines.Clear();
            // set view engine
            ViewEngines.Engines.Add(new TenantViewEngine(tenantSelector));

            // set controller factory
            ControllerBuilder.Current.SetControllerFactory(new ContainerControllerFactory(containerSelector));
        }
        public void DefaultTenantSelector_Ctr_SetsControllers()
        {
            var tenants  = Enumerable.Empty <IApplicationTenant>();
            var selector = new DefaultTenantSelector(tenants);

            Assert.Same(tenants, selector.Tenants);
        }
        public void DefaultTenantSelector_Select_ReturnsTenantWithSpecifiedBasePath()
        {
            var url = "http://wwww.eagleenvision.net";

            var expected = GenerateTenant(url);
            var tenants  = new[] { GenerateTenant(),
                                   GenerateTenant("http://www.google.com", "http://www.yahoo.com"),
                                   expected };
            var selector = new DefaultTenantSelector(tenants);

            Assert.Same(expected, selector.Select(FakeRequest(url)));
        }
Exemplo n.º 4
0
        public static void RegisterPlumbing(HttpContext context)
        {
            // Create a container just to pull in tenants
            var topContainer = new Container();

            topContainer.Configure(config =>
            {
                config.Scan(scanner =>
                {
                    // scan the tenants folder
                    // (For some reason just passing "Tenants" doesn't seem to work, which it should according to the docs)
                    scanner.AssembliesFromPath(Path.Combine(context.Server.MapPath("~/"), "Tenants"));

                    // pull in all the tenant types
                    scanner.AddAllTypesOf <ITenant>();
                });
            });

            // create selectors
            var tenantSelector = new DefaultTenantSelector(topContainer.GetAllInstances <ITenant>());

            foreach (var tenant in tenantSelector.Tenants)
            {
                var types = new Type[2];
                types[0] = tenant.GetType();
                types[1] = typeof(MvcApplication);
                tenant.DependencyContainer = RazorMultiTenancy.AssemblySettings.FormContainer(types, config => config.For <ITenant>().Singleton().Use(tenant));
            }

            var containerSelector = new TenantContainerResolver(tenantSelector);

            // clear view engines, we don't want anything other than tenant view engine
            ViewEngines.Engines.Clear();

            // set view engine
            var engine = new TenantViewEngine(tenantSelector);

            foreach (ITenant tenant in tenantSelector.Tenants)
            {
                System.Web.WebPages.VirtualPathFactoryManager.RegisterVirtualPathFactory((System.Web.WebPages.IVirtualPathFactory)tenant.ViewEngine);
            }

            ViewEngines.Engines.Add(engine);
            ViewEngines.Engines.Add(new RazorViewEngine());

            // set controller factory
            ControllerBuilder.Current.SetControllerFactory(new ContainerControllerFactory(containerSelector));
        }