从运行时从另一个程序集加载控制器

Mak*_*Vi. 1 c# asp.net-mvc asp.net-mvc-4

在我在主网页程序集中的项目中,在我在global.asax中注册路由之前,我加载了许多外部程序集.其中一些程序集中包含MVC控制器和视图.

我的问题是这些外部控制器由于某种原因没有被选中,我认为控制器注册发生在我的程序集加载之前的某个地方,因为如果我在应用程序启动之前引用我的程序集(bin文件夹中的dll)一切正常.

所以我想知道是否有

  • 一种控制mvc控制器何时注册的方法,所以我可以在加载所有程序集后执行此操作?要么
  • 注入我的外部控制器的方法?

之前我遇到过与WebAPI控制器类似的问题,我可以通过使用我的自定义修复它HttpControllerSelector,但我还没有在MVC中找到类似的东西.

Mak*_*Vi. 5

能够通过覆盖来解决这个问题DefaultControllerFactoryCreateController方法:

的Application_Start:

IControllerFactory factory = new ControllerFactory();
ControllerBuilder.Current.SetControllerFactory(factory);
Run Code Online (Sandbox Code Playgroud)

的ControllerFactory:

public class ControllerFactory : DefaultControllerFactory
{
    public override IController CreateController(RequestContext requestContext, string controllerName)
    {
         IController controller = null;
         Type controllerType;
         if (ControllerTypes.TryGetValue(controllerName.ToLower(), out controllerType))
         {
              controller = (IController) Activator.CreateInstance(controllerType);
         }
         return controller;
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

ControllerTypes 是来自外部程序集的MVC控制器的字典.