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

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

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

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

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

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

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

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

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

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

这样就可以通过area名找到插件、控制器对象、控制器视图目录。

好啦,现在又可以开心的玩代码了,插件开发就是如此简单

如果需要更深入了解可以下载源码

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

本版本做了很多优化,性能又提高了不少,欢迎大家加群一起学习:群号:142939183

 

转载于:https://www.cnblogs.com/gengzhe/p/4463294.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值