2009-02-20 45 views
11

我对工作中的大型项目有一个设计理念,我想我已经想通了,但真的很想获得关于a)一般想法的一些反馈,以及b)我的建议实现。将控制器工厂添加到ASP MVC

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

问题是MVC在相同程序集内的类型上进行路由,所以即使我将路由定义移动到数据库,MvcHttpHandler也无法路由因为它没有“知道”它的控制器类型,所以看到MVC代码,我发现要加载控制器,他们只需调用Activator.CreateInstance,它只在当前程序集中看起来像

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

回答

6

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

+0

谢谢,本。这就是我一直在寻找的。 – Gil 2009-02-20 03:29:59

1

控制器工厂的概念没有什么错,只要以后只是为了灵活性即可。当你使用属于其他图层的代码加载控制器时的问题,这是你可能“需要”其他控制器灵活性的原因之一。只要你不捣乱层,我看不出工厂的想法。