我正在尝试从其他程序集加载Controller
,但我被困在这里。
我有两个项目:
在网络应用程序中,我定义了Route
:
routes.MapRoute("Root", "root/{Action}",
new {Controller = "Root", Action = "Index" });
现在,当我点击以下网址时,路由匹配,但会引发404错误。 有谁可以告诉我为什么会这样?(p.s. RootController
位于类库中)
http://webapp/root
我尝试添加自定义控制器工厂:
public class ControllerFactory : DefaultControllerFactory {
protected override IController GetControllerInstance(RequestContext reqContext, Type controllerType)
{
// reqContext.Route is correct and has the "Root" route loaded
// controllerType seems to be null ??
// if I break execution here and manually set controllerType to
// typeof(ClassLibrary.RootController) and continue from there,
// then everything works as expected...
// So this method is being called without controllerType... but why??
}
}
我还尝试在路线中添加namespaces
属性:
routes.MapRoute("Root", "root/{Action}",
new {
Controller = "Root",
Action = "Index",
Namespaces = new[] { typeof(RootController).Namespace }
});
答案 0 :(得分:4)
经过多次调试和挫折后,我发现控制器类被声明为private
,但在场景中不起作用。
即使我的ControllerFactory
位于同一名称空间中,创建控制器缓存的类也不是。因此,GetControllerInstance
基类对DefaultControllerFactory
的请求找不到RootController
类。
将RootController
声明为public
解决问题。