我正在 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 如何知道要使用哪个控制器工厂?在一个应用程序中,我希望许多控制器都采用不同的参数类型,那么这将如何工作?
我试着用谷歌搜索这个特定的问题,但实际上找不到任何东西。我刚刚发现了一堆人们使用的框架,但我想了解其中的特定部分。谢谢!