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; }