Abp模板項目采用NavigationProvider構建項目的導航菜單逾雄。導航菜單在模塊的預處理函數(shù)中進行加載胧后,也就是在應用啟動時,導航數(shù)據(jù)已經(jīng)加載到運行系統(tǒng)中(也就是所有的菜單數(shù)據(jù)一次加載到內(nèi)存)辽慕,用戶在訪問頁面時酬核,會從內(nèi)存中獲取導航菜單的數(shù)據(jù)進行權限判斷并進行展示。這種方式與其它一些平臺的處理有所不同浪册,通常是在用戶登錄后扫腺,會根據(jù)用戶的權限獲取菜單數(shù)據(jù)(菜單數(shù)據(jù)可能是從數(shù)據(jù)庫或者xml文件中直接獲取)村象,然后再進行展示笆环。Abp的這種菜單加載方式有一些限制:
- 菜單加載在模塊初始化中進行,因此菜單數(shù)據(jù)獲取不能使用Abp的Application Service或Responsitory(因為這時Request還沒有初始化厚者,如前面的文章所述)躁劣,需要編寫自定義的數(shù)據(jù)獲取方法。
- 不能實現(xiàn)菜單的動態(tài)加載库菲。如果菜單數(shù)據(jù)發(fā)生變化账忘,需要重新啟動應用,菜單才能刷新熙宇。很多CMS系統(tǒng)具有動態(tài)增加菜單的功能鳖擒,比如DNN Platform(DotNetNuke) 等。
如果項目中需要避免上面的限制烫止,需要采用自定義的導航方式蒋荚。