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

  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.rhkb.cn/news/26058.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

音乐游戏Pump It Up(PIU)模拟器

文章目录 (一)Pump It Up(1.1)基本情况(1.2)机体 (二)模拟器(2.1)主程序(2.2)模拟器主题 (三)曲谱文件&#x…

Flink同步数据mysql到doris问题合集

Flink同步数据mysql到doris 官方同步流程Doris安装下载地址导入镜像启动配置 Flink-cdc安装(自制)下载地址导入镜像启动命令 启动问题修复Flink报错Could not acquire the minimum required resources.作业报错 Mysql8.0 Public Key Retrieval is not al…

STM32呼吸灯实验手册(TIM定时器)

一、实验目标 使用TIM定时器的PWM模式控制LED亮度实现LED渐亮渐灭的呼吸灯效果掌握HAL库的TIM配置方法 二、硬件准备 开发板:STM32F103C8T6LED模块:LED串联220Ω电阻两组USB-TTL调试器硬件连接 三、软件配置(STM32CubeMX) 打开…

vue框架后遗症∶被遗忘的dom操作

用多了vue、react等前端框架,不得不说用数据驱动视图来开发真的很香,但是也免不了会有不用这些框架的项目,dom操作还是很有必要的,一开始学习网页设计的时候就教过,后面一直开发项目基本上用框架。虽然有些想不起来了&…

Centos7源码编译安装Sqlite最新版本

下载源码 https://www.sqlite.org/download.html 复制下载链接,然后用 wget 下载 wget https://www.sqlite.org/2025/sqlite-autoconf-3490100.tar.gz 解压缩编译安装 tar -zxf sqlite-autoconf-3490100.tar.gz cd sqlite-autoconf-3490100 ./configure --prefi…

数据结构秘籍(二)图(含图的概念、存储以及图的两大搜索)

1 引言 线性数据结构的元素满足唯一的线性关系,每个元素(初第一个和最后一个外)只有一个直接前趋和一个直接后继。树形数据结构的元素之间有着明显的层次关系。但是图形结构的元素之间的关系是任意的。 什么是图? 简单来说&…

遗传算法详解及在matlab中的使用

遗传算法分析 一 遗传算法概述1 算法概念2 基本特点3 启发式算法 二 原理与方法1 实现步骤1.1 个体编码1.2 种群初始化1.3 适应度计算1.4 选择运算1.5 交叉运算1.6 变异运算 2 总结 三 应用实例1 GA工具使用教程2 设置目标函数3 搜索最小值4 搜索最大值 一 遗传算法概述 本章简…

pytorch基础-nn.linear

import torch import torch.nn as nn# 定义线性层 linear_layer nn.Linear(in_features10, out_features5, biasTrue)# 输入数据 input_data torch.randn(32, 10) # (batch_size32, in_features10)# 前向传播 output linear_layer(input_data) print(output.shape) # 输出…

Is Noise Conditioning Necessary for Denoising Generative Models?论文阅读笔记

很吸引人的一个标题,很吸引人的一个作者,来读一读明神的新作,讲的是怎么把去噪领域的一些有意思的思想,特别是blind denoising和noise-level estimation的思想,应用到denoising diffusion模型中,从而去掉de…

PDF文档中表格以及形状解析

我们在做PDF文档解析时有时需要解析PDF文档中的表格、形状等数据。跟解析文本类似的常见的解决方案也是两种。文档解析跟ocr技术处理。下面我们来看看使用文档解析的方案来做PDF文档中的表格、图形解析(使用pdfium库)。 表格解析: 在pdfium库…

ESP32-S3 42引脚 语音控制模块、设备运转展示 GOOUUU TECH 果云科技S3-N16R8 控制舵机 LED开关 直流电机

最近还是想玩了下esp32,基于原来的开发板,看见佬做了一个语音识别的项目,通过这个语音识别可以控制LED开关和直流电机这些,详情可见视频(推荐)具体硬件就在下方。 信泰微】ESP32-S3 42引脚 语音控制模块、…

RabbitMQ快速入门

目录 MQ简介 1、同步通信 图片 2、异步通信 图片 RabbitMQ快速上手 基本介绍: Producer和Consumer Connection和Channel Virtual host Queue Exchange 工作流程 AMQP Java编写RabbitMQ生产者消费者 生产者 1.建立连接 2.开启信道 3.声明交换机 4.声…

【Qt】编程基础

目录 一、Qt体系框架: ​编辑二、布局方式: 1.绝对布局 setGeometry()函数 2.盒子布局: QHBoxLayout:水平布局管理器 QVBoxLayout:垂直布局管理器 QGridLayout:网格布局管理器 三、基本控件及其函数 标签类 :QLabel 按…

温湿度监控设备融入智慧物联网

当医院的温湿度监控设备融入智慧物联网,将会带来许多新的体验,可以帮助医院温湿度监控设备智能化管理,实现设备之间的互联互通,方便医院对温湿度数据进行统一管理和分析。 添加智慧物联网技术,实现对医院温湿度的实时…

登录次数限制

文章目录 一、应用场景与设计目的1. 应用场景2. 设计目的 二、功能设计1. 登录限制规则2. 解锁机制3. 适用维度 三、技术实现1. 数据存储2. 逻辑流程3. 实现代码示例4. 动态锁定时间 四、安全增强与扩展1. 防止用户名枚举2. 加入验证码3. 监控与报警4. 分布式支持 五、设计思考…

人工智能销售客服app开发,OpenAI宣布GPT-5免费使用?Deepseek让AI巨头全跪了

人工智能技术的飞速发展,正在深刻改变着各行各业,销售客服领域也不例外。随着 GPT-5 等大型语言模型的不断进化,AI 销售客服系统也迎来了前所未有的变革,开启了智能客服的新时代。 传统客服痛点亟待解决: 传统的销售…

vscode集成DeepSeek

vscode 扩展 安装 Cline Meet Cline,一个可以使用你的CLI和编辑器的AI助手。 得益于 Claude 3.5 Sonnet的代理编码功能,Cline 可以逐步处理复杂的软件开发任务。借助让他创建和编辑文件、探索大型项目、使用浏览器和执行终端命令(在您授予权限后)的工具&…

2.27-1笔记1

一、新建表 二、建表语句 create table student( id int primary key , name char(20), sex char(10), age int(3), mobile char(20), class char(10), english int(10), chinese int(10), math int(10) )engineinnodb default charsetutf8; insert into student values (1,小…

30.[前端开发-JavaScript基础]Day07-数组Array-高阶函数-日期Date-DOM

JavaScript的DOM操作 (一) 1 什么是DOM? 认识DOM和BOM 深入理解DOM 2 认识DOM Tree DOM Tree的理解 3 DOM的整体结构 DOM的学习顺序 DOM的继承关系图 document对象 4 节点、元素导航 节点(Node)之间的导航&…

【Viewer.js】vue3封装图片查看器

效果图 需求 点击图片放大可关闭放大的 图片 下载 cnpm in viewerjs状态管理方法 stores/imgSeeStore.js import { defineStore } from pinia export const imgSeeStore defineStore(imgSeeStore, {state: () > ({showImgSee: false,ImgUrl: ,}),getters: {},actions: {…