Skip to content

Instantly share code, notes, and snippets.

@jakcharlton
Created October 15, 2010 04:02
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jakcharlton/627595 to your computer and use it in GitHub Desktop.
Save jakcharlton/627595 to your computer and use it in GitHub Desktop.
public class ControllerFactory : IControllerFactory
{
readonly IWindsorContainer container;
public ControllerFactory() : this(((IContainerAccessor) HttpContext.Current.ApplicationInstance).Container)
{
}
public ControllerFactory(IWindsorContainer container)
{
if (container == null)
throw new ArgumentNullException("container", "Windsor Container cannot be null");
this.container = container;
}
#region IControllerFactory Members
public virtual IController CreateController(RequestContext context, string controllerName)
{
string baseNs = typeof (BaseController).Namespace;
string action = context.RouteData.GetRequiredString("action").ToLower() + "controller";
try
{
var controller =
(IController) container.Resolve(baseNs.ToLower() + "." + controllerName.ToLower() + "." + action);
return controller;
}
catch (ComponentNotFoundException ex)
{
context.HttpContext.Response.Redirect("/PageNotFound/?url=" + context.HttpContext.Request.Url);
}
return null;
}
public void ReleaseController(IController controller)
{
var disposable = controller as IDisposable;
if (disposable != null)
{
disposable.Dispose();
}
container.Release(controller);
}
#endregion
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment