开源博客项目Blog .NET Core源码学习(10:App.Framwork项目结构分析)

2024-03-25 14:28

本文主要是介绍开源博客项目Blog .NET Core源码学习(10:App.Framwork项目结构分析),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  开源博客项目Blog的解决方案总共包括4个项目,其中App.Hosting项目包括所有的页面及控制器类,其它项目主要提供数据库访问、基础类型定义等。这四个项目的依赖关系如下图所示,本文主要分析App.Framwork项目的主要结构及主要文件的用途。
在这里插入图片描述
  App.Framwork项目主要安装了以下Package包,用于自动依赖注入、缓存设置与操作、数据验证、日志记录及数据映射。

AspectCore.Extensions.Autofac
Autofac.Extensions.DependencyInjection
EasyCaching.Core
EasyCaching.CSRedis
EasyCaching.InMemory
EasyCaching.Interceptor.AspectCore
EasyCaching.Serialization.Json
EasyCaching.Serialization.MessagePack
FluentValidation.AspNetCore
log4net
Mapster

  App.Framwork项目的顶层文件及文件夹如下图所示,下面逐一概述其大致用途。
在这里插入图片描述

  Storage.cs。全局静态类,保存了所有的项目程序集(Assemblys),也能从中获取http请求上下文(Current)、配置文件的根节点(Configuration)、Autofac依赖注入静态服务(Container)等重要信息,同时提供GetService和GetScopeService获取指定服务。
  DataValidation文件夹。保存数据验证相关的特性类、过滤器类的定义。其下级结构如下图所示,其中:
  定义了IgnoreValidationAttribute类以支撑忽略数据验证的场景;
  定义了DataValidationFilter类以处理客户端请求中的数据验证操作;
  MvcBuilderExtensions类仅定义AddValidation函数,用于在程序启动时设置数据验证相关属性,同时枚举及注册所有继承自IValidator接口的组件,并在函数最后设置全局过滤器。

在这里插入图片描述

  DependencyInjection文件夹。用于定义依赖注入相关的接口、扩展类的定义。其下级结构如下图所示,其中:
  AutofacModule类用于检索并注册所有继承自IScopedDependency、ISingletonDependency、ITransientDependency接口的组件,同时注册所有控制器类;
  ApplicationBuilderExtensions扩展类用于给Storage.Container属性赋值;
  AspectCoreInterceptorAutofacExtensions扩展类用于注册EasyCaching缓存相关的类型;
  ContainerBuilderExtensions类的AutoRegisterService函数支持基于Autofac注册以指定字符串结尾的类型(App.Hosting项目的program.cs文件中调用该函数注册所有service结尾的类);
  AddAutoDependencyInjection扩展类定义了另一种类型自动注册方式(应该没有使用,没找到调用点)。

在这里插入图片描述

  Encryption文件夹。包含MD5、Sha256两种摘要计算类。
  Extensions文件夹。里面包含两个空类的定义,没有实质内容。
  Generate文件夹。其下级结构如下图所示,其中Snowflakeid创建雪花ID,VerifyCode生成验证码文本及图片,Geetest文件夹中保存与极验相关的接口、类型、交互操作类。
在这里插入图片描述

  Log文件夹。保存日志接口及基于log4net的日志实现类。
  Mapper文件夹。其中的ServiceCollectionExtension类用于设置Mapster相关配置,并在App.Hosting项目的program.cs文件中调用。
  Net文件夹。其中的Net类定义发送post、get请求的同步和异步函数,同时定义获取客户端/服务端IP、获取操作系统版本号、获取浏览器信等通用操作函数,该类为通用类,可直接用于其它网站项目。
  Result文件夹。包含解决方案内所有函数中使用的操作结果类型枚举定义ResultType,同时定义解决方案内所有函数中都能使用的通用操作结果类UnifyResult和泛型类UnifyResult。
  ValueType文件夹。其中的EnumExtensions扩展类的函数Description用于保存并返回指定枚举类的描述(获取枚举类型相关的DescriptionAttribute的值)。

参考文献:
[1]https://gitee.com/miss_you/Blog
[2]https://www.donet5.com/Home/Doc
[3]https://github.com/MapsterMapper/Mapster
[4]https://github.com/rivenfx/Mapster-docs

这篇关于开源博客项目Blog .NET Core源码学习(10:App.Framwork项目结构分析)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/845283

相关文章

慢sql提前分析预警和动态sql替换-Mybatis-SQL

《慢sql提前分析预警和动态sql替换-Mybatis-SQL》为防止慢SQL问题而开发的MyBatis组件,该组件能够在开发、测试阶段自动分析SQL语句,并在出现慢SQL问题时通过Ducc配置实现动... 目录背景解决思路开源方案调研设计方案详细设计使用方法1、引入依赖jar包2、配置组件XML3、核心配

Python开发文字版随机事件游戏的项目实例

《Python开发文字版随机事件游戏的项目实例》随机事件游戏是一种通过生成不可预测的事件来增强游戏体验的类型,在这篇博文中,我们将使用Python开发一款文字版随机事件游戏,通过这个项目,读者不仅能够... 目录项目概述2.1 游戏概念2.2 游戏特色2.3 目标玩家群体技术选择与环境准备3.1 开发环境3

Java NoClassDefFoundError运行时错误分析解决

《JavaNoClassDefFoundError运行时错误分析解决》在Java开发中,NoClassDefFoundError是一种常见的运行时错误,它通常表明Java虚拟机在尝试加载一个类时未能... 目录前言一、问题分析二、报错原因三、解决思路检查类路径配置检查依赖库检查类文件调试类加载器问题四、常见

Python中的Walrus运算符分析示例详解

《Python中的Walrus运算符分析示例详解》Python中的Walrus运算符(:=)是Python3.8引入的一个新特性,允许在表达式中同时赋值和返回值,它的核心作用是减少重复计算,提升代码简... 目录1. 在循环中避免重复计算2. 在条件判断中同时赋值变量3. 在列表推导式或字典推导式中简化逻辑

Java学习手册之Filter和Listener使用方法

《Java学习手册之Filter和Listener使用方法》:本文主要介绍Java学习手册之Filter和Listener使用方法的相关资料,Filter是一种拦截器,可以在请求到达Servl... 目录一、Filter(过滤器)1. Filter 的工作原理2. Filter 的配置与使用二、Listen

SpringBoot项目中报错The field screenShot exceeds its maximum permitted size of 1048576 bytes.的问题及解决

《SpringBoot项目中报错ThefieldscreenShotexceedsitsmaximumpermittedsizeof1048576bytes.的问题及解决》这篇文章... 目录项目场景问题描述原因分析解决方案总结项目场景javascript提示:项目相关背景:项目场景:基于Spring

解决Maven项目idea找不到本地仓库jar包问题以及使用mvn install:install-file

《解决Maven项目idea找不到本地仓库jar包问题以及使用mvninstall:install-file》:本文主要介绍解决Maven项目idea找不到本地仓库jar包问题以及使用mvnin... 目录Maven项目idea找不到本地仓库jar包以及使用mvn install:install-file基

springboot项目如何开启https服务

《springboot项目如何开启https服务》:本文主要介绍springboot项目如何开启https服务方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录springboot项目开启https服务1. 生成SSL证书密钥库使用keytool生成自签名证书将

Java程序进程起来了但是不打印日志的原因分析

《Java程序进程起来了但是不打印日志的原因分析》:本文主要介绍Java程序进程起来了但是不打印日志的原因分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java程序进程起来了但是不打印日志的原因1、日志配置问题2、日志文件权限问题3、日志文件路径问题4、程序

将Java项目提交到云服务器的流程步骤

《将Java项目提交到云服务器的流程步骤》所谓将项目提交到云服务器即将你的项目打成一个jar包然后提交到云服务器即可,因此我们需要准备服务器环境为:Linux+JDK+MariDB(MySQL)+Gi... 目录1. 安装 jdk1.1 查看 jdk 版本1.2 下载 jdk2. 安装 mariadb(my