开源博客项目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

相关文章

如何解决idea的Module:‘:app‘platform‘android-32‘not found.问题

《如何解决idea的Module:‘:app‘platform‘android-32‘notfound.问题》:本文主要介绍如何解决idea的Module:‘:app‘platform‘andr... 目录idea的Module:‘:app‘pwww.chinasem.cnlatform‘android-32

使用Python构建一个Hexo博客发布工具

《使用Python构建一个Hexo博客发布工具》虽然Hexo的命令行工具非常强大,但对于日常的博客撰写和发布过程,我总觉得缺少一个直观的图形界面来简化操作,下面我们就来看看如何使用Python构建一个... 目录引言Hexo博客系统简介设计需求技术选择代码实现主框架界面设计核心功能实现1. 发布文章2. 加

Node.js 数据库 CRUD 项目示例详解(完美解决方案)

《Node.js数据库CRUD项目示例详解(完美解决方案)》:本文主要介绍Node.js数据库CRUD项目示例详解(完美解决方案),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考... 目录项目结构1. 初始化项目2. 配置数据库连接 (config/db.js)3. 创建模型 (models/

springboot项目中常用的工具类和api详解

《springboot项目中常用的工具类和api详解》在SpringBoot项目中,开发者通常会依赖一些工具类和API来简化开发、提高效率,以下是一些常用的工具类及其典型应用场景,涵盖Spring原生... 目录1. Spring Framework 自带工具类(1) StringUtils(2) Coll

Python 迭代器和生成器概念及场景分析

《Python迭代器和生成器概念及场景分析》yield是Python中实现惰性计算和协程的核心工具,结合send()、throw()、close()等方法,能够构建高效、灵活的数据流和控制流模型,这... 目录迭代器的介绍自定义迭代器省略的迭代器生产器的介绍yield的普通用法yield的高级用法yidle

Spring Boot项目部署命令java -jar的各种参数及作用详解

《SpringBoot项目部署命令java-jar的各种参数及作用详解》:本文主要介绍SpringBoot项目部署命令java-jar的各种参数及作用的相关资料,包括设置内存大小、垃圾回收... 目录前言一、基础命令结构二、常见的 Java 命令参数1. 设置内存大小2. 配置垃圾回收器3. 配置线程栈大小

C++ Sort函数使用场景分析

《C++Sort函数使用场景分析》sort函数是algorithm库下的一个函数,sort函数是不稳定的,即大小相同的元素在排序后相对顺序可能发生改变,如果某些场景需要保持相同元素间的相对顺序,可使... 目录C++ Sort函数详解一、sort函数调用的两种方式二、sort函数使用场景三、sort函数排序

Spring Boot项目中结合MyBatis实现MySQL的自动主从切换功能

《SpringBoot项目中结合MyBatis实现MySQL的自动主从切换功能》:本文主要介绍SpringBoot项目中结合MyBatis实现MySQL的自动主从切换功能,本文分步骤给大家介绍的... 目录原理解析1. mysql主从复制(Master-Slave Replication)2. 读写分离3.

Java调用C++动态库超详细步骤讲解(附源码)

《Java调用C++动态库超详细步骤讲解(附源码)》C语言因其高效和接近硬件的特性,时常会被用在性能要求较高或者需要直接操作硬件的场合,:本文主要介绍Java调用C++动态库的相关资料,文中通过代... 目录一、直接调用C++库第一步:动态库生成(vs2017+qt5.12.10)第二步:Java调用C++

kotlin中const 和val的区别及使用场景分析

《kotlin中const和val的区别及使用场景分析》在Kotlin中,const和val都是用来声明常量的,但它们的使用场景和功能有所不同,下面给大家介绍kotlin中const和val的区别,... 目录kotlin中const 和val的区别1. val:2. const:二 代码示例1 Java