.NET MVC 插件化框架支持原生MVC的Area和路由特性

前面开放的源码只是简单的Plugin的实现,支持了插件的热插拔,最近晚上偶然想到,原生的MVC提供Areas和RouteAtrribute等路由特性标签,按照先前的作法,没法解析插件的路由特性和Areas,因此花费了两个晚上的时间,把插件给改进到支持Areas和路由特性,但同时也放弃了Web类插件的热插拔,Func类的插件依然支持热插拔。git

下面是实现支持插件使用Areas和路由特性标签的流程:github

原生的MVC在启动的时候须要执行两条代码: AreaRegistration.RegisterAllAreas(); RouteTable.Routes.MapMvcAttributeRoutes();用来注册Areas和映射路由标签,咱们想正确解析插件的Areas和路由特性,只能从这里入手。为了找到解决办法,我阅读了MVC的源码,但看完源码后,我感到很是x疼,由于全部自定义注册的方法都申明为Internall了,程序集外部根本没法调用,下面是截图:web

哎,没办法,只好使用反射来调用了,我在Sun.Framework.Plugin.MVC下面加了一个路由拓展方法类mvc

经过这个拓展方法,能够把全部使用了路由特性的控制器类型进行注册。如今就能够在IManage类中调用该方法,在初始化插件的时候,把插件中的控制器所有注册。性能

另外我还优化了上一版本中Web类插件实现的繁琐的问题,把插件中通用路由的注册从插件的IPlugin中移除了,跟原生MVC同样放到了App_Start目录下面学习

这个类须要实现Sun.Framework中自定义的MvcRouteConfig抽象方法,目的是让插件初始化的时候,路由自动注册。优化

为了支持Areas,web类插件的配置数据作了调整插件

配置中加入了Areas属性,这里面必须提供插件的全部Area以及所在目录对象

这样就能够经过area名找到插件、控制器对象、控制器视图目录。路由

好啦,如今又能够开心的玩代码了,插件开发就是如此简单

若是须要更深刻了解能够下载源码

源码地址:https://github.com/luohuazhiyu/sunmvc

本版本作了不少优化,性能又提升了很多,欢迎你们加群一块儿学习:群号:142939183

相关文章
相关标签/搜索