开源博客项目Blog .NET Core源码学习(9:Autofac使用浅析)

news2024/9/21 2:33:19

  开源博客项目Blog使用Autofac注册并管理组件和服务,Autofac是面向.net 的开源IOC容器,支持通过接口、实例、程序集等方式注册组件和服务,同时支持属性注入、方法注入等注入方式。本文学习并记录Blog项目中Autofac的使用方式。
  整个Blog解决方案主要在App.Hosting和App.Framwork项目中使用Autofac,这里的使用指的是注册Autofac中间件、注册组件和服务等,不包括在控制器类中传递接口实例。

在这里插入图片描述
  App.Hosting项目中主要在Program.cs文件中注册Autofac中间件,如下图所示,并调用App.Framwork项目中的扩展类注册相关组件和服务。
在这里插入图片描述

  在Program.cs文件的下半部分还调用了App.Framwork项目中的函数赋予全局静态类Storage中的Container属性赋予基于Autofac的ILifetimeScope实例对象,以便在需要的地方能通过代码获取Autofac注册的组件。
在这里插入图片描述
  App.Framwork项目主要在5个类中调用Autofac相关的类或函数,主要包括:
  1)AutofacModule类,位于AutofacModule.cs,命名空间为App.Framwork. DependencyInjection ,主要以仓储模式注入组件,该类将解决方案中所有继承自IScopedDependency 、ISingletonDependency、ITransientDependency等接口的类型注册为组件,将继承自IScopedDependency接口的类型注册为每次使用都创建新实例(InstancePerDependency),将继承自ISingletonDependency接口的类型注册为单例模式(SingleInstance),将继承自ITransientDependency接口的类型注册为每次请求创建新实例(InstancePerLifetimeScope),同时该类将所有继承自ControllerBase的类型都注册为属性自动注入(PropertiesAutowired)。

  2)ContainerBuilderExtensions类,位于ContainerBuilderExtensions.cs,命名空间为App. Framwork.DependencyInjection.Extensions,该类主要将解决方案的所有程序集中类型以指定字符串结尾的类型注册为每次请求创建新实例(InstancePerLifetimeScope),在本项目中主要是注册所有以service结尾的类。
  3)AspectCoreInterceptorAutofacExtensions类,位于AspectCoreInterceptorAutofacExtensions.cs,命名空间为App.Framwork.DependencyInjection. Extensions。该类主要基于AspectCore的动态代理接入Autofac,这个没有看的太明白。
  4)Storage类,位于Storage.cs,命名空间为App.Framwork,该类的属性Container类型为ILifetimeScope,在App.Hosting项目的Program.cs中调用app.UseStaticContainer()(该函数定义于App.Framwork项目ApplicationBuilderExtensions类,位于ApplicationBuilderExtensions.cs,命名空间为App.Framwork.DependencyInjection.Extensions)赋予基于Autofac的ILifetimeScope实例对象值。Container属性主要在Storage类的GetService函数中用于返回指定服务的组件。

参考文献:
[1]https://gitee.com/miss_you/Blog
[2]https://autofac.org/
[3]https://github.com/autofac/Autofac
[4]https://blog.csdn.net/Mr_Fei/article/details/129199686

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1464818.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

hash,以及数据结构——map容器

1.hash是什么? 定义:hash,一般翻译做散列、杂凑,或音译为哈希,是把任意长度的输入(又叫做预映射pre-image)通过散列算法变换成固定长度的输出, 该输出就是散列值。这种转换是一种压缩映射&…

【selenium】三大切换 iframe 弹窗alert 句柄window 和 鼠标操作

目录 一、iframe 1、切换方式: 1、第一种情况: 2、第二种情况: 方式1: 先找到iframe,定位iframe元素(可以通过元素定位的各种方式:xpath,css等等),用对象接收&…

vue后台管理添加水印简单方式watermark-package

详情参考:https://www.npmjs.com/package/watermark-package 示例方法 <el-button type"primary" click"AddWatermark">添加水印</el-button><el-button type"primary" click"RemoveWatermark">清除水印</el-but…

7 个值得收藏的 Python 身份验证库

在数字化转型时代&#xff0c;每一个数据字节都成为潜在的金矿&#xff0c;保护数据变得至关重要。将数字领域视为一座古老的宫殿&#xff0c;虽然里面装饰着宝藏&#xff08;读&#xff1a;数据&#xff09;&#xff0c;但大门&#xff08;读&#xff1a;身份验证&#xff09;…

Qt 事件

1. 事件 事件是对各种应用程序需要知道的由应用程序内部或者外部产生的事情或者动作的通称。在Qt中使用一个对象来表示一个事件&#xff0c;它继承自QEvent类。 2. 事件和信号 事件与信号并不相同&#xff0c;比如我们使用鼠标点击了一下界面上的按钮&#xff0c;那么就会产生…

信钰证券:炒股死记8句口诀?新手须知!

炒股死记以下8句口诀&#xff1a; 1、早上大跌可加仓&#xff0c;早上大涨要减仓 当个股在开盘后呈现大跌的状况&#xff0c;很有可能是主力在使用低开进行洗盘操作&#xff0c;散户能够考虑在此刻加仓&#xff0c;等股价反弹时&#xff0c;好做T卖出&#xff0c;赚取一定的差…

【Appium UI自动化】pytest运行常见错误解决办法

通过Appium工具录制代码在pycharm上运行报错&#xff1a; 错误一&#xff1a; 1.提示 setup() 方法运行 error failed 解决办法&#xff1a;未创建 init __ 方法&#xff0c;创建一个空的__init.py文件就解决了。 原因&#xff1a; 错误二&#xff1a; 2.运行代码&#xff…

文心一言 VS 讯飞星火 VS chatgpt (199)-- 算法导论15.2 1题

一、用go语言&#xff0c;对矩阵规模序列(5&#xff0c;10&#xff0c;3&#xff0c;12&#xff0c;5&#xff0c;50&#xff0c;6)&#xff0c;求矩阵链最优括号化方案。 文心一言&#xff0c;代码正常运行&#xff1a; 在Go语言中&#xff0c;为了找到矩阵链乘法的最优括号…

船舶制造5G智能工厂数字孪生可视化平台,推进船舶行业数字化转型

船舶制造5G智能工厂数字孪生可视化平台&#xff0c;推进船舶行业数字化转型。随着数字化时代的到来&#xff0c;船舶行业正面临着前所未有的机遇与挑战。为了适应这一变革&#xff0c;船舶制造企业需要加快数字化转型的步伐&#xff0c;提高生产效率、降低成本并增强市场竞争力…

C 嵌入式系统设计模式 09:硬件适配器模式

本书的原著为&#xff1a;《Design Patterns for Embedded Systems in C ——An Embedded Software Engineering Toolkit 》&#xff0c;讲解的是嵌入式系统设计模式&#xff0c;是一本不可多得的好书。 本系列描述我对书中内容的理解。本文章描述访问硬件的设计模式之二&…

JAVA毕业设计128—基于Java+Springboot+Vue的共享单车租赁管理系统(源代码+数据库)

毕设所有选题&#xff1a; https://blog.csdn.net/2303_76227485/article/details/131104075 基于JavaSpringbootVue的共享单车租赁管理系统(源代码数据库)128 一、系统介绍 本项目前后端分离&#xff0c;本系统分为管理员、用户两种角色 1、用户&#xff1a; 注册、登录、…

Java学习笔记2024/2/22

面向对象进阶部分学习方法&#xff1a; 特点&#xff1a; 逻辑性没有那么强&#xff0c;但是概念会比较多。 记忆部分重要的概念&#xff0c;理解课堂上讲解的需要大家掌握的概念&#xff0c;多多练习代码。 今日内容 复习回顾 static关键字 继承 教学目标 能够掌握st…

【移动安全】MobSF联动安卓模拟器配置动态分析教程

原文链接 MobSF联动安卓模拟器配置动态分析教程 实现方式 Windows开启安卓模拟器并进行相关配置作为调试客户端&#xff0c;Linux使用docker开启MobSF作为服务端。 好处&#xff1a;干净&#xff0c;部署简单&#xff0c;不用安装乱七八糟的环境&#xff0c;防止破坏其他应…

SpringCloud(14)之SpringCloud Consul

我们知道 Eureka 2.X 遇到困难停止开发了&#xff0c;所以我们需要寻找其他的替代技术替代Eureka&#xff0c;这一小 节我们就讲解一个新的组件Consul。 一、Consul介绍 Consul 是 HashiCorp 公司推出的开源工具&#xff0c;用于实现分布式系统的服务发现与配置。与其它分布式…

【k8s核心概念与专业术语】

k8s架构 1、服务的分类 服务分类按如下图根据数据服务支撑&#xff0c;分为无状态和有状态 无状态引用如下所示&#xff0c;如果一个nginx服务&#xff0c;删除后重新部署有可以访问&#xff0c;这个属于无状态&#xff0c;不涉及到数据存储。 有状态服务&#xff0c;如redis&a…

音视频技术-电脑连接调音台时交流声的产生与消除

当电脑(笔记本/台式机)声卡通过音频线与调音台(或扩音机)连接时,能听到“交流声”。有时很轻微,有时很明显,甚至干扰正常的演讲或发言。 很多时候,我们在台上演讲时,都会使用电脑播放PPT,遇到视频时,还需要将视频中的音频扩大。电脑音频的输出口一般都是3.5的,我们…

Flutter常用命令,持续更新

目录 前言 Flutter 常用命令 Dart 常用命令 adb 常用命令&#xff08;用于 Android 开发&#xff09; 前言 当在开发Flutter项目时&#xff0c;熟悉一些常用的命令是非常重要的。这些命令可以帮助你执行各种任务&#xff0c;从构建应用程序到调试和测试。以下是一些Flutte…

SQL注入:sqli-labs 46关(order by注入)

sqli-lab靶场的46关是需要使用order by注入的 通过页面提示我们可以给sort传入一个值&#xff0c;那么尝试传入id&#xff1a; 可以看到是基于id排序的结果显示了出来 那么我们可以尝试闭合一下看是否存在报错注入 可以看到是报错了&#xff0c;但是当我们想要尝试进行联合查…

浅谈集群的分类

本文主要介绍集群部署相关的知识&#xff0c;介绍集群部署的基础&#xff0c;集群的分类、集群的负载均衡技术&#xff0c;集群的可用性以及集群的容错机制。随后介绍Redis-Cluster以及Mysql的架构以及主从复制原理。 集群介绍 单台服务器本身会受到带宽、内存、处理器等多方面…

PostgreSQL教程(二):pg安装、架构基础、创建并访问数据库

安装 自然&#xff0c;在你能开始使用PostgreSQL之前&#xff0c; 你必须安装它。PostgreSQL很有可能已经安装到你的节点上了&#xff0c; 因为它可能包含在你的操作系统的发布里&#xff0c; 或者是系统管理员已经安装了它。如果是这样的话&#xff0c; 那么你应该从操作系统…