.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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM