我对工作中的一个大型项目有一个设计想法,我想我已经弄清楚了,但我真的很想得到一些关于a)总体想法和b)我提议的实现的反馈。
基本想法很简单:我想创建一个 ASP MVC 应用程序,将来可以使用其他控制器和视图进行扩展,而无需重新编译代码。这个想法是让一个 MVC 应用程序具有一组非常基本的功能,然后通过添加另一个“Application.dll”来扩展功能,其中包含特定于该应用程序的控制器、数据和业务逻辑。视图将被简单地复制安装期间与主 MVC 应用程序位于同一目录中。
问题是 MVC 在同一程序集中的类型上进行路由,因此即使我将路由定义移动到数据库,MvcHttpHandler 也无法将任何内容路由到新的 Dll,因为它不“知道”控制器类型在里面。查看 MVC 代码,我发现要加载控制器,它们只需调用 Activator.CreateInstance,它仅在当前程序集中查找。
我的解决方案很简单,但也许我遗漏了一些东西:我将通过直接替换 ControllerFactory (不知道如何执行此操作)或通过在派生类中复制该功能来重写 MvcHttpHandler。新代码将读取请求并尝试首先从当前程序集加载控制器,然后从扩展程序集加载控制器。一旦找到正确的程序集,我将使用 CreateInstance 并将该程序集传递给它以获得我想要的控制器。
结尾本文 http://weblogs.asp.net/shijuvarghese/archive/2008/10/10/asp-net-mvc-tip-dependency-injection-with-structuremap.aspx展示如何实现您自己的 ControllerFactory。基本上,您从 DefaultControllerFactory 派生,然后将其连接到 global.asax 中的 Application_Start() 中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)