我对工作中的大型项目有一个设计理念,我想我已经弄明白了,但我真的很想得到一些反馈:a)一般的想法,以及b)我提议的实施.
基本思路很简单:我想创建一个ASP MVC应用程序,可以在将来使用其他控制器和视图进行扩展,而无需重新编译代码.我们的想法是让一个MVC应用程序具有一组非常基本的功能,然后通过添加另一个'Application.dll'来扩展功能,该应用程序包含特定于该应用程序的控制器,数据和业务逻辑.视图将被简单地复制在安装期间进入与主MVC应用程序相同的目录.
问题是MVC在同一个程序集中的类型上进行路由,因此即使我将路由定义移动到数据库,MvcHttpHandler也无法将任何内容路由到新的Dll,因为它不"知道"控制器类型在里面.看一下MVC代码,我发现要加载控制器,他们只是调用Activator.CreateInstance,它只在当前程序集中查找.
我的解决方案很简单,但也许我错过了一些东西:我将通过直接替换ControllerFactory(不确定如何做)或通过在派生类中复制该功能来覆盖MvcHttpHandler.新代码将读取请求并尝试首先从当前程序集加载控制器,然后从扩展程序集加载控制器.一旦找到正确的程序集,我将使用CreateInstance并将该程序集传递给它以获得我想要的控制器.
本文结尾处展示了如何实现自己的ControllerFactory.基本上,您从DefaultControllerFactory派生,然后在global.asax中的Application_Start()中连接它.