Castle.MonoRail.Framework.EngineContextModule.CreateControllerAndRunStartRequestFilters C# (CSharp) Method

CreateControllerAndRunStartRequestFilters() private method

Creates the controller, selects the target action and run start request filters.
private CreateControllerAndRunStartRequestFilters ( object sender, EventArgs e ) : void
sender object The HttpApplication instance
e System.EventArgs Event information
return void
		private void CreateControllerAndRunStartRequestFilters(object sender, EventArgs e)
		{
			HttpApplication app = (HttpApplication) sender;
			if (!IsMonoRailRequest(app.Context)) return;

			IRailsEngineContext context = ObtainRailsEngineContext(app.Context);

			Controller controller;

			try
			{
				controller = CreateController(context);
			}
			catch(Exception ex)
			{
				IViewEngineManager viewEngineManager = context.GetService<IViewEngineManager>();

				if (viewEngineManager.HasTemplate("rescues/404"))
				{
					viewEngineManager.Process(context, new Controller.EmptyController(context), "rescues/404");

					IExceptionProcessor exProcessor = context.GetService<IExceptionProcessor>();
				
					if (exProcessor != null)
					{
						exProcessor.ProcessException(ex);
					}

					app.Context.Response.End();
				}
				else
				{
					throw;
				}

				return;
			}

			IControllerLifecycleExecutor executor = CreateControllerExecutor(controller, context);

			UrlInfo info = context.UrlInfo;

			executor.InitializeController(info.Area, info.Controller, info.Action);

			if (!executor.SelectAction(info.Action, info.Controller))
			{
				// Could not even select the action, stop here

				return;
			}

			if (!executor.RunStartRequestFilters())
			{
				// Cancel request execution as
				// one of the filters returned false
				// We assume that the filter that stopped the request, also sent a redirect
				// or something similar

				context.UnderlyingContext.Response.End();

				executor.Dispose();
			}
		}