Click here to Skip to main content
15,881,709 members
Articles / Web Development / ASP.NET

Fluent Filters - Global Action Filters for ASP.NET MVC 2

Rate me:
Please Sign up or sign in to vote.
4.50/5 (4 votes)
8 Nov 2010Apache3 min read 32.9K   381   10  
This article describes a small library for ASP.NET MVC, that can be used as a facility for registering global filters. It is similar to Global Filter in ASP.NET MVC 3, but with different implementation and features.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
using Microsoft.Practices.Unity;

namespace Website.Core
{
    public class UnityControllerFactory : DefaultControllerFactory
    {
        private readonly IUnityContainer _container;

        public UnityControllerFactory(IUnityContainer container)
        {
            _container = container;
        }

        protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType)
        {
            IController icontroller;

            if (controllerType == null)
            {
                throw new HttpException(404, String.Format("The controller for path '{0}' could not be found or it does not implement IController.",
                                        requestContext.HttpContext.Request.Path));
            }

            if (!typeof(IController).IsAssignableFrom(controllerType))
            {
                throw new ArgumentException(string.Format("Type requested is not a controller: {0}", controllerType.Name), "controllerType");
            }

            try
            {
                icontroller = _container.Resolve(controllerType) as IController; // Resolve controller
                var controller = icontroller as Controller;
                if (controller != null)
                {
                    // Set custom ActionInvoker
                    controller.ActionInvoker = _container.Resolve<IActionInvoker>();
                }
            }
            catch (Exception ex)
            {
                throw new InvalidOperationException(String.Format("Error resolving controller {0}", controllerType.Name), ex);
            }

            return icontroller;
        }
    }
}

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Apache License, Version 2.0


Written By
Software Developer (Senior) Warner Bros Discovery
United States United States
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions