我正在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如何知道使用哪个控制器工厂?在一个应用程序中,我希望许多控制器都采用不同的参数类型,那么它将如何工作?
我尝试使用谷歌搜索这个具体问题,但实际上找不到任何东西。我刚刚发现了一些人们使用的框架,但我想了解它的这一特定部分。谢谢!
答案 0 :(得分:0)
您不需要控制器工厂。看看asp.net mvc dependency injection。您应该获得基本概述,然后找到能够与asp.net mvc 2一起使用的依赖注入器