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

时间:2013-07-17 19:00:34

标签: c# asp.net-mvc asp.net-mvc-4

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

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

所以我想知道是否有

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

之前我遇到过与WebAPI控制器类似的问题,我可以使用我的自定义HttpControllerSelector修复它,但我还是找不到类似的MVC。

2 个答案:

答案 0 :(得分:5)

能够通过覆盖DefaultControllerFactory的{​​{1}}方法来解决问题:

的Application_Start:

CreateController

的ControllerFactory:

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; } ... } 是来自外部程序集的MVC控制器的字典。

答案 1 :(得分:1)

请参阅thisthis - 使用城堡windsor 等创建自定义控制器工厂