0

我正在 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 对象。由于注册了这个自定义控制器工厂,现在这个应用程序中从未使用过默认控制器工厂吗?我现在有2个工厂吗?所有其他控制器的默认设置,而这个特定控制器仅用于 HomeController?如果是这样,MVC 如何知道要使用哪个控制器工厂?在一个应用程序中,我希望许多控制器都采用不同的参数类型,那么这将如何工作?

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

4

1 回答 1

0

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

于 2013-07-11T14:56:05.140 回答