将控制器工厂添加到ASP MVC

时间:2009-02-20 03:11:07

标签: asp.net-mvc

我对工作中的大型项目有一个设计理念,我认为我已经弄明白但是我真的很想得到一些关于a)这个想法的反馈,以及b)我建议的实施。

基本思路很简单:我想创建一个ASP MVC应用程序,可以在将来使用其他控制器和视图进行扩展,而无需重新编译代码。我们的想法是让一个MVC应用程序具有一组非常基本的功能,然后通过添加另一个'Application.dll'来扩展功能,该应用程序包含特定于该应用程序的控制器,数据和业务逻辑。视图将被简单地复制在安装期间进入与主MVC应用程序相同的目录。

问题是MVC在同一个程序集中对类型进行路由,所以即使我将路由定义移动到数据库,MvcHttpHandler也无法将任何内容路由到新的Dll,因为它不“知道”控制器键入其中。看一下MVC代码,我发现要加载控制器,他们只是调用Activator.CreateInstance,它只在当前程序集中查找。

我的解决方案很简单,但也许我遗漏了一些东西:我将通过直接替换ControllerFactory(不确定如何做)或通过在派生类中复制该功能来覆盖MvcHttpHandler。新代码将读取请求并尝试首先从当前程序集加载控制器,然后从扩展程序集加载控制器。一旦找到正确的程序集,我将使用CreateInstance并将该程序集传递给它以获得我想要的控制器。

2 个答案:

答案 0 :(得分:6)

this article的结尾显示了如何实现自己的ControllerFactory。基本上,您从DefaultControllerFactory派生,然后在global.asax中的Application_Start()中连接它。

答案 1 :(得分:1)

控制器工厂的想法没有任何问题,只要它以后只是为了灵活性。当您使用属于其他层的代码加载控制器时出现问题,这是您可能“需要”其他控制器灵活性的一个原因。只要你没有捣碎层,我就不会发现工厂的想法。