【问题标题】:asp.net mvc 2 custom controller factoryasp.net mvc 2 自定义控制器工厂
【发布时间】:2013-07-11 14:52:53
【问题描述】:

我正在 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 如何知道要使用哪个控制器工厂?在一个应用程序中,我希望许多控制器都采用不同的参数类型,那么这将如何工作?

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

【问题讨论】:

    标签: asp.net-mvc


    【解决方案1】:

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

    【讨论】:

    • 如果我不想使用第 3 方依赖注入器框架怎么办?似乎制作自定义控制器是正确的方法吗?如果是这样,我的问题就成立了。似乎几乎每个相当复杂的 MVC 应用程序都需要这个功能,那么为什么要使用所有这些外部依赖注入器而不是内置的东西呢?
    • 另外,查看haacked.com/archive/2007/12/07/… 它仍然创建了一个自定义控制器工厂,但我再次没有看到关于 MVC 如何知道该控制器在其 ctor 中使用此自定义类型的链接。我似乎没有看到任何明确定义的内容。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-02
    • 2011-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多