前面開放的源碼只是簡單的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