Asp.net MVC2中你必须知道的扩展点(一):Controller Factory2011-08-15 博客园 麒麟Asp.net mvc2中提供很多可以扩展的地方,利用这些扩展之后,asp.net mvc使用起来更加灵活。 Simone Chiaretta曾写过一篇文章:13 ASP.NET MVC extensibility points you have to know。文章中 概括性的介绍了13个asp.net mvc开发人员必须知道的扩展点。我将从这13个扩展点中挑选几个常见的重 要的扩展点进行详细的介绍。这篇将文章将首先介绍Controller Factory。Controller Factory是Asp.MVC框架中一个重要的扩展点。Controller Factory是用来创建控制器。而 Controller最常用的场景之一是支持依赖注入。但是如果直接在控制器中使用依赖注入,默认情况下 asp.net mvc框架将不会为你创建Controller,而且你还会得到下面这个错误,如下图:

产生上面错误的原因是DefaultControllerFactory使用Activator.CreateInstance来初始化控制器, 而这个方法对你依赖注入的参数一无所知。这种情况下,我们就要使用自定义的Controller Factory。一个自定义的Controller Factory需要继承IControllerFactory或者继承过IControllerFactory的类 ,如:DefaultControllerFactory。下面代码是一个自定义的Controller factory。
public class MyCustomControllerFactory : DefaultControllerFactory
{
     protected override IController GetControllerInstance(RequestContext  requestContext, Type controllerType)
     {
         /* implement controller creation logic */
         return base.GetControllerInstance(requestContext, controllerType);
     }
}