我有一个自定义控制器工厂(与我的问题相关的非常基本的实现):
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
自动使用在(配置指定)区域中定义的控制器(即,如果发生冲突,如上所述,使用区域控制器而不是非区域控制器)。如果该区域不包含匹配的控制器,请退回到不在该区域中的控制器。