控制器没有从不同的组件加载?

时间:2012-03-25 16:16:48

标签: asp.net-mvc routing controller assemblies

我正在尝试从其他程序集加载Controller,但我被困在这里。

我有两个项目:

  1. 网络应用
  2. 班级图书馆
  3. 在网络应用程序中,我定义了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 }                     
                  });
    

1 个答案:

答案 0 :(得分:4)

经过多次调试和挫折后,我发现控制器类被声明为private,但在场景中不起作用。

即使我的ControllerFactory位于同一名称空间中,创建控制器缓存的类也不是。因此,GetControllerInstance基类对DefaultControllerFactory的请求找不到RootController类。

RootController声明为public解决问题。