开源博客项目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运行spring项目时,控制台未出现的解决方案

《IDEA运行spring项目时,控制台未出现的解决方案》文章总结了在使用IDEA运行代码时,控制台未出现的问题和解决方案,问题可能是由于点击图标或重启IDEA后控制台仍未显示,解决方案提供了解决方法... 目录问题分析解决方案总结问题js使用IDEA,点击运行按钮,运行结束,但控制台未出现http://

解决IDEA使用springBoot创建项目,lombok标注实体类后编译无报错,但是运行时报错问题

《解决IDEA使用springBoot创建项目,lombok标注实体类后编译无报错,但是运行时报错问题》文章详细描述了在使用lombok的@Data注解标注实体类时遇到编译无误但运行时报错的问题,分析... 目录问题分析问题解决方案步骤一步骤二步骤三总结问题使用lombok注解@Data标注实体类,编译时

C语言小项目实战之通讯录功能

《C语言小项目实战之通讯录功能》:本文主要介绍如何设计和实现一个简单的通讯录管理系统,包括联系人信息的存储、增加、删除、查找、修改和排序等功能,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录功能介绍:添加联系人模块显示联系人模块删除联系人模块查找联系人模块修改联系人模块排序联系人模块源代码如下

Go中sync.Once源码的深度讲解

《Go中sync.Once源码的深度讲解》sync.Once是Go语言标准库中的一个同步原语,用于确保某个操作只执行一次,本文将从源码出发为大家详细介绍一下sync.Once的具体使用,x希望对大家有... 目录概念简单示例源码解读总结概念sync.Once是Go语言标准库中的一个同步原语,用于确保某个操

SpringBoot项目中Maven剔除无用Jar引用的最佳实践

《SpringBoot项目中Maven剔除无用Jar引用的最佳实践》在SpringBoot项目开发中,Maven是最常用的构建工具之一,通过Maven,我们可以轻松地管理项目所需的依赖,而,... 目录1、引言2、Maven 依赖管理的基础概念2.1 什么是 Maven 依赖2.2 Maven 的依赖传递机

Vue项目中Element UI组件未注册的问题原因及解决方法

《Vue项目中ElementUI组件未注册的问题原因及解决方法》在Vue项目中使用ElementUI组件库时,开发者可能会遇到一些常见问题,例如组件未正确注册导致的警告或错误,本文将详细探讨这些问题... 目录引言一、问题背景1.1 错误信息分析1.2 问题原因二、解决方法2.1 全局引入 Element

Redis主从/哨兵机制原理分析

《Redis主从/哨兵机制原理分析》本文介绍了Redis的主从复制和哨兵机制,主从复制实现了数据的热备份和负载均衡,而哨兵机制可以监控Redis集群,实现自动故障转移,哨兵机制通过监控、下线、选举和故... 目录一、主从复制1.1 什么是主从复制1.2 主从复制的作用1.3 主从复制原理1.3.1 全量复制

Python 中 requests 与 aiohttp 在实际项目中的选择策略详解

《Python中requests与aiohttp在实际项目中的选择策略详解》本文主要介绍了Python爬虫开发中常用的两个库requests和aiohttp的使用方法及其区别,通过实际项目案... 目录一、requests 库二、aiohttp 库三、requests 和 aiohttp 的比较四、requ

SpringBoot项目启动后自动加载系统配置的多种实现方式

《SpringBoot项目启动后自动加载系统配置的多种实现方式》:本文主要介绍SpringBoot项目启动后自动加载系统配置的多种实现方式,并通过代码示例讲解的非常详细,对大家的学习或工作有一定的... 目录1. 使用 CommandLineRunner实现方式:2. 使用 ApplicationRunne

Redis主从复制的原理分析

《Redis主从复制的原理分析》Redis主从复制通过将数据镜像到多个从节点,实现高可用性和扩展性,主从复制包括初次全量同步和增量同步两个阶段,为优化复制性能,可以采用AOF持久化、调整复制超时时间、... 目录Redis主从复制的原理主从复制概述配置主从复制数据同步过程复制一致性与延迟故障转移机制监控与维