在运行时从另一个程序集加载控制器
本文关键字:加载 控制器 程序集 另一个 运行时 | 更新日期: 2023-09-27 18:22:49
在我的项目中,在global.asax中注册路由之前,我在主web程序集中加载了一些外部程序集。其中一些程序集内部有MVC控制器和视图。
我的问题是,由于某种原因,这些外部控制器没有被拾取,我认为控制器注册发生在加载程序集之前的某个地方,因为如果我在应用程序启动之前引用程序集(bin文件夹中的dll),一切都会正常工作。
所以我想知道是否有
- 一种控制mvc控制器何时注册的方法,这样我就可以在加载所有程序集后进行注册?或
- 注入外部控制器的方法
我以前在WebAPI控制器上也遇到过类似的问题,我可以通过使用自定义HttpControllerSelector
来修复它,但在MVC中还找不到类似的东西。
能够通过重写DefaultControllerFactory
的CreateController
方法来解决问题:
应用程序启动:
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控制器的字典。