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

最近更新

  1. TCP协议是安全的吗?

    2024-03-25 20:36:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-25 20:36:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-25 20:36:03       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-25 20:36:03       20 阅读

热门阅读

  1. 【Node.js】流

    2024-03-25 20:36:03       20 阅读
  2. 【如何解决Go包中循环依赖】

    2024-03-25 20:36:03       18 阅读
  3. Android基础面试题目汇总

    2024-03-25 20:36:03       17 阅读
  4. 2019南京大学计算机考研复试机试题-Stepping Numbers

    2024-03-25 20:36:03       15 阅读
  5. Nginx配置文件中Location指令的匹配优先级

    2024-03-25 20:36:03       17 阅读
  6. 【微服务设计】常见的DDD设计中的经验教训!

    2024-03-25 20:36:03       19 阅读
  7. 计算机网络原理之四种攻击

    2024-03-25 20:36:03       21 阅读