【发布时间】:2013-09-03 20:01:28
【问题描述】:
我有一个自定义控制器工厂(与我的问题相关的非常基本的实现):
public class MyControllerFactory : DefaultControllerFactory
{
public override IController CreateController(RequestContext requestContext, string controllerName)
{
var controller = base.CreateController(requestContext, controllerName);
return controller;
}
protected override System.Web.SessionState.SessionStateBehavior GetControllerSessionBehavior(RequestContext requestContext, Type controllerType)
{
return base.GetControllerSessionBehavior(requestContext, controllerType);
}
}
在global.asax中注册是这样的:
protected void Application_Start()
{
ControllerBuilder.Current.SetControllerFactory(typeof(MyControllerFactory));
// other code here
}
当解析控制器没有冲突(例如在解析过程中只找到一个控制器)时,在此控制器工厂中设置的断点会被正确命中。但是,当我有两个具有相同名称的控制器(在我的情况下:一个在一个区域中,一个不在一个区域中)而不在路由中使用命名空间约束时,我的控制器不会被命中,DefaultControllerFactory 会接管并引发(预期的)异常。
我的问题
我是否正确注册了MyControllerFactory?在我上面概述的情况下,它没有被使用是否还有其他原因?
我要做什么
我正在尝试编写一个ControllerFactory,它自动使用在(配置指定)区域中定义的控制器(即,如果发生冲突,如上所示,使用区域控制器而不是非区域控制器) .如果该区域不包含匹配的控制器,请退回到不在该区域中的控制器。
【问题讨论】:
标签: c# asp.net-mvc-4 asp.net-mvc-areas controller-factory