Abp模板项目采用NavigationProvider构建项目的导航菜单。导航菜单在模块的预处理函数中进行加载,也就是在应用启动时,导航数据已经加载到运行系统中(也就是所有的菜单数据一次加载到内存),用户在访问页面时,会从内存中获取导航菜单的数据进行权限判断并进行展示。这种方式与其它一些平台的处理有所不同,通常是在用户登录后,会根据用户的权限获取菜单数据(菜单数据可能是从数据库或者xml文件中直接获取),然后再进行展示。Abp的这种菜单加载方式有一些限制:
- 菜单加载在模块初始化中进行,因此菜单数据获取不能使用Abp的Application Service或Responsitory(因为这时Request还没有初始化,如前面的文章所述),需要编写自定义的数据获取方法。
- 不能实现菜单的动态加载。如果菜单数据发生变化,需要重新启动应用,菜单才能刷新。很多CMS系统具有动态增加菜单的功能,比如DNN Platform(DotNetNuke) 等。
如果项目中需要避免上面的限制,需要采用自定义的导航方式。