2

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

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

所以我想知道是否有

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

我之前在 WebAPI 控制器上遇到过类似的问题,我可以通过使用我的 custom 来修复它HttpControllerSelector,但是我还没有在 MVC 中找到任何类似的东西。

4

2 回答 2

6

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

应用程序_开始:

IControllerFactory factory = new ControllerFactory();
ControllerBuilder.Current.SetControllerFactory(factory);

控制器工厂:

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;
    }
    ...
}

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

于 2013-07-17T21:31:29.413 回答
1

看到这个这个-使用城堡温莎等创建自定义控制器工厂。

于 2013-07-17T19:05:11.980 回答