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 TenantContainerResolver_Resolve_ReturnsContainerFromSelectedTenant()
 {
     var container = new Container();
     var tenant = new Mock<IApplicationTenant>();
     tenant.Setup(x=>x.DependencyContainer).Returns(container);
     var tenantSelector = new Mock<ITenantSelector>();
     tenantSelector.Setup(x => x.Select(It.IsAny<RequestContext>())).Returns(tenant.Object);
     var resolver = new TenantContainerResolver(tenantSelector.Object);
     Assert.Same(container, resolver.Resolve(new RequestContext()));
 }