public override IController CreateController(RequestContext requestContext, string controllerName)
        {
            IContainer nestedContainer = container.GetNestedContainer();

            requestContext.HttpContext.Items[NestedContainerKey] = nestedContainer;

            ControllerBase controllerBase = null;

            Func <ControllerContext> ctxtCtor = () => controllerBase == null ? null : controllerBase.ControllerContext;

            nestedContainer.Configure(cfg =>
            {
                cfg.For <RequestContext>().Use(requestContext);
                cfg.For <HttpContextBase>().Use(requestContext.HttpContext);
                cfg.For <Func <ControllerContext> >().Use(ctxtCtor);
                cfg.For <IFlashMessenger>()
                .HybridHttpOrThreadLocalScoped()
                .Use(x =>
                {
                    ControllerContext controllerContext = x.GetInstance <Func <ControllerContext> >()();
                    ControllerBase currentController    = controllerContext.Controller;
                    TempDataDictionary tempData         = currentController.TempData;
                    var resourceLocator        = nestedContainer.GetInstance <IResourcesLocator>();
                    var flashMessenger         = new WebFlashMessenger(resourceLocator);
                    tempData["FlashMessenger"] = flashMessenger;
                    return(flashMessenger);
                });
            });

            var controller = nestedContainer.TryGetInstance <IController>(controllerName);

            controllerBase = controller as ControllerBase;

            if (controller == null)
            {
                throw new HttpException(
                          (int)HttpStatusCode.NotFound,
                          string.Format(CultureInfo.CurrentUICulture, "No controller found for {0} at path {1}.",
                                        new object[] { controllerName, requestContext.HttpContext.Request.Path }));
            }

            return(controller);
        }
        public override IController CreateController(RequestContext requestContext, string controllerName)
        {
            var nestedContainer = this.container.GetNestedContainer();
            requestContext.HttpContext.Items[NestedContainerKey] = nestedContainer;

            ControllerBase controllerBase = null;

            Func<ControllerContext> ctxtCtor = () => controllerBase == null ? null : controllerBase.ControllerContext;

            nestedContainer.Configure(cfg =>
            {
                cfg.For<RequestContext>().Use(requestContext);
                cfg.For<HttpContextBase>().Use(requestContext.HttpContext);
                cfg.For<Func<ControllerContext>>().Use(ctxtCtor);
                cfg.For<IFlashMessenger>()
                    .HybridHttpOrThreadLocalScoped()
                    .Use(x =>
                    {
                        var controllerContext = x.GetInstance<Func<ControllerContext>>()();
                        var currentController = controllerContext.Controller;
                        var tempData = currentController.TempData;
                        var resourceLocator = nestedContainer.GetInstance<IResourcesLocator>();
                        var flashMessenger = new WebFlashMessenger(resourceLocator);
                        tempData["FlashMessenger"] = flashMessenger;
                        return flashMessenger;
                    });

                
            });

            var controller = nestedContainer.TryGetInstance<IController>(controllerName);
            controllerBase = controller as ControllerBase;
            
            if (controller == null)
            {
                throw new HttpException(
                    (int)HttpStatusCode.NotFound,
                    string.Format(CultureInfo.CurrentUICulture, "No controller found for {0} at path {1}.", new object[] { controllerName, requestContext.HttpContext.Request.Path }));
            }

            return controller;
        }