asp.net mvc 2自定义控制器工厂

时间:2013-07-11 14:52:53

标签: asp.net-mvc

我正在asp.net空间学习MVC。如果我想通过我的控制器ctor参数,我似乎可以创建一个我在MVC框架中注册的控制器工厂。我看到下面的例子,我不得不想知道MVC框架在创建控制器时如何知道使用这个工厂?

public class CustomControllerFactory : IControllerFactory
{
    public IController CreateController(System.Web.Routing.RequestContext requestContext, string controllerName)
       {
        ILogger logger = new DefaultLogger();
        var controller = new HomeController(logger);
        return controller;
    }
    public System.Web.SessionState.SessionStateBehavior GetControllerSessionBehavior(
   System.Web.Routing.RequestContext requestContext, string controllerName)
    {
        return SessionStateBehavior.Default;
    }
    public void ReleaseController(IController controller)
    {
        IDisposable disposable = controller as IDisposable;
        if (disposable != null)
            disposable.Dispose();
    }
} 

public class MvcApplication : System.Web.HttpApplication
{
    protected void Application_Start()
    {
    RegisterCustomControllerFactory ();
    }
}
private void RegisterCustomControllerFactory ()
{
    IControllerFactory factory = new CustomControllerFactory();
    ControllerBuilder.Current.SetControllerFactory(factory);
}

因此,此控制器工厂创建HomeController的实例并传递特定的Logger对象。由于注册了这个自定义控制器工厂,现在这个应用程序中是否从未使用过默认控制器工厂?我现在有两家工厂吗?所有其他控制器的默认值以及仅适用于HomeController的特定控制器?如果是这样,MVC如何知道使用哪个控制器工厂?在一个应用程序中,我希望许多控制器都采用不同的参数类型,那么它将如何工作?

我尝试使用谷歌搜索这个具体问题,但实际上找不到任何东西。我刚刚发现了一些人们使用的框架,但我想了解它的这一特定部分。谢谢!

1 个答案:

答案 0 :(得分:0)

您不需要控制器工厂。看看asp.net mvc dependency injection。您应该获得基本概述,然后找到能够与asp.net mvc 2一起使用的依赖注入器