ShenNiusModularity项目源码学习(14:ShenNius.Infrastructure项目分析)

ops/2025/2/28 7:22:18/

  ShenNius.Infrastructure项目用于定义ShenNius.Admin.Mvc项目和ShenNius.Admin.API项目共用的特性类、数据操作接口实现类、上下文类、通讯类,主要文件的用途如下:
在这里插入图片描述
  Attributes文件夹保存特性类或过滤器类定义,主要包括:
  1)AuthorityAttribute:访问控制类,继承自ActionFilterAttribute,主要实现在访问函数之前判断用户是否登录、是否有权限访问该函数;
  2)GlobalExceptionFilter:自定义异常过滤器类,继承自IExceptionFilter接口,用于在捕获异常时记录日志,该类在ShenNius.Admin.API项目的ShenniusAdminApiModule.OnConfigureServices中调用以注册全局异常处理(参考文献2)。
.  3)LogAttribute:审计日志记录类,继承自ActionFilterAttribute接口,用于在操作执行后记录日志,但暂未看到项目中使用该类;
  4)ModelValidateAttribute:自定义模型验证过滤器类,继承自ModelValidateAttribute接口,用于在模型验证失败后使用ApiResult类返回验证结果,该类在ShenNius.Admin.API项目的ShenniusAdminApiModule.OnConfigureServices中调用以注册全局过滤器;
  5)MultiTenantAttribute:自定义多租户处理类,继承自ActionFilterAttribute和IActionFilter,用于在执行操作时从当前上下文中获取当前用户的TenantId,并赋予操作函数的每个输入参数对象的TenantId属性(只要参数类继承自IGlobalTenant接口),该类按需赋予ShenNius.Admin.Mvc项目和ShenNius.Admin.API项目的控制器类及其内部函数。

  Hubs文件夹仅包含UserLoginNotifiHub类定义,该类继承自Hub,使用SignalR与前端通信,用于同一账户在不同客户端登录时通知之前的客户端下线。该类在ShenNius.Admin.API项目的ShenniusAdminApiModule的OnConfigureServices内注册服务,并在OnApplicationInitialization函数内使用app.UseEndpoints映射全局路由。ShenNius.Mvc.Admin项目的mysignalR.js文件内使用signalR.HubConnectionBuilder连接上述路由,然后在Index.cshtml文件内使用signalr发送当前用户已经登录的信息,也即调用服务端UserLoginNotifiHub.SaveCurrentUserInfo函数保存信息,如果信息已存在,则提醒该账号已在另一地方登录,并返回登录页面。
  Repository文件夹包括特定数据操作接口的实现类,主要包括商城模块的商品、订单数据操作接口实现类,系统模块的菜单、回收站数据操作接口实现类,之前文章中介绍过,在此不再赘述。
  TimedTask文件夹包括自定义后台服务类TimedBackgroundService,该类继承自BackgroundService(参考文献3),其启动后创建System.Threading.Timer对象(参考文献4)运行定时服务,定期刷新用户的登录状态。ShenNius.Admin.API项目的ShenniusAdminApiModule的OnConfigureServices内使用Services.AddHostedService注册后台服务。
  根目录下的EntityExpand文件定义辅助函数处理树形结构数据,主要用在ShenNius.Admin.API项目的ColumnController、CategoryController控制器类以处理树形栏目及商品分类,还用在本项目的MenuRepository内显示多级菜单。
  根目录下的ShenNiusContext类ShenNius.Domain项目IShenNiusContext接口的实现类,该类基于Token或者HttpContext.User获取用户信息、登录信息、IP等上下文数据,ShenNius.Admin.API项目的ShenniusAdminApiModule的OnConfigureServices内注册该类。

参考文献:
[1]https://gitee.com/shenniu_code_group/shen-nius.-modularity
[2]https://www.cnblogs.com/51net/p/18698187
[3]https://blog.csdn.net/qq_31136349/article/details/139473574
[4]https://www.cnblogs.com/hnzhengfy/p/SystemThreadingTimer.html


http://www.ppmy.cn/ops/161885.html

相关文章

说说 Spring MVC 的执行流程

Spring MVC 是一个基于 Java 的轻量级、开源的 Web 框架,用于构建 Web 应用程序。它通过将请求处理的各个阶段解耦,使得开发更加灵活和模块化。以下是 Spring MVC 的执行流程,从用户发起请求到返回响应的整个过程: --- ### 1. 用…

ubuntu系统的发展历史 和 版本

1.ubuntu系统的发展历史 和 版本 Ubuntu 是一款基于 Linux 的开源操作系统,自 2004 年由南非企业家马克沙特尔沃思(Mark Shuttleworth)创立以来,迅速发展成为全球最受欢迎的 Linux 发行版之一。Ubuntu 的名字来源于非洲祖鲁语&am…

【吾爱出品】 [Windows] AI模型应用提示词查询工具——AI提示词宝典2.5

[Windows] AI提示词宝典2.5 链接:https://pan.xunlei.com/s/VOK40OUDs8jp8UtuZ4tM9Cc0A1?pwdku8i# 高质AI问答宝典 本提示词宝典内所“提示词”,均来自当前最新网络收集的AI使用文档(包含清华大学出品的四套Deepseek应用教程和相关…

mapbox实现添加历史轨迹,并进行动画播放效果

1、引入播放插件类 https://download.csdn.net/download/qq_48795482/90437319 2、添加图层 drawRouteLine(resData, layerType) {console.log("调用了轨迹线函数", resData);var jsondata {type: "FeatureCollection",features: [],};var linejsondat…

【Go】十八、http 调用服务的编写

http接口框架的搭建 这个http接口框架的搭建参考之前的全量搭建,这里是快速搭建的模式: 直接对已有的http模块进行复制修改,主要修改点在于 proto部分与api、router 部分,剩余的要针对进行修改模块名称。 接口的具体编写 在 a…

常用的css自用记录

1.选中父元素的input框聚焦 focus-within&#xff0c;普通的focus只适用于input框&#xff0c; focus-within给input框的父元素设置&#xff0c;可以设置聚焦时父元素的样式设置 2.常用于表单必填项星号设置 以前都是直接使用<span>*</span>然后设置样式&#xff…

DeepBI AI驱动的关键词出价优化策略:提升亚马逊广告ROI的关键

在亚马逊广告投放中&#xff0c;关键词的出价策略在提升广告曝光量、点击率和最终销售转化率中扮演着至关重要的角色。为了最大化广告的投资回报率&#xff08;ROI&#xff09;&#xff0c;精准地控制关键词的出价变得尤为重要。通过智能化的动态调整&#xff0c;确保广告在恰当…

3-2 WPS JS宏 工作簿的打开与保存(模板批量另存为工作)学习笔记

************************************************************************************************************** 点击进入 -我要自学网-国内领先的专业视频教程学习网站 *******************************************************************************************…