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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Window部署SkyWalking

SkyWalking mysql的驱动依赖 选择下载版本 v9.4 现在后解压缩目录结构 一、修改config目录文件 application.yml 修改1: selector: ${SW_STORAGE:h2} 修改后: selector: ${SW_STORAGE:mysql} 修改2:使用mysql数据库 mysql: properti…

【前端素材】推荐优质后台管理系统GramOs平台模板(附源码)

一、需求分析 后台管理系统是一种用于管理网站、应用程序或系统的工具,它通常作为一个独立的后台界面存在,供管理员或特定用户使用。下面详细分析后台管理系统的定义和功能: 1. 定义 后台管理系统是一个用于管理和控制网站、应用程序或系统…

Eureka注册中心(黑马学习笔记)

Eureka注册中心 假如我们的服务提供者user-service部署了多个实例,如图: 大家思考几个问题: order-service在发起远程调用的时候,该如何得知user-service实例的ip地址和端口? 有多个user-service实例地址&#xff0c…

java数据结构与算法刷题-----LeetCode404. 左叶子之和

java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完):https://blog.csdn.net/grd_java/article/details/123063846 解题思路 深度优先遍历,或者广度优先向下遍历时,如…

大数据揭秘:Hadoop短视频流量分析实战

✍✍计算机编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java实战 |…

2024 Sora来了!“手机Agent智能体”也来了!

近日,Open AI发布了能够根据文本生成超现实视频的工具Sora,多款震撼视频引爆科技圈刷屏,热度持续发酵占据AI领域话题中心,被认为是AGI实现过程里的重大里程碑事件。新一轮的人工智能浪潮给人类未来的生产和生活方式带来巨大而深远…

【Kotlin】流程控制

1 选择结构 Kotlin 中选择结构主要包含 if -else、when 语句,并且可以返回结果。 1.1 if-else 1.1. 条件选择 fun main() {var score 85if (score > 90) {println("优秀")} else if (score > 80) {println("良好")} else if (score &…

十九、图像的放缩和插值

项目功能实现&#xff1a;对一张图像进行放大和缩小操作 按照之前的博文结构来&#xff0c;这里就不在赘述了 一、头文件 resizing.h #pragma once#include<opencv2/opencv.hpp>using namespace cv;class RESIZING { public:void resizing(Mat& image); };#pragma…

【EndNote20】Endnote20和word的一些操作

文章目录 前言一、如何导入参考文献到EndNote201.1.在谷歌学术或知网上下载文献1.2.将下载好的文件导入EndNote20(可批量导入)1.3.书籍如何导入 二、Word中加入参考文献 前言 做毕设时学习了EndNote20的一些使用方法&#xff0c;并在此慢慢做汇总。 一、如何导入参考文献到End…

分类预测 | Matlab实现KPCA-ISSA-LSSVM基于核主成分分析和改进的麻雀搜索算法优化最小二乘支持向量机故障诊断分类预测

分类预测 | Matlab实现KPCA-ISSA-LSSVM基于核主成分分析和改进的麻雀搜索算法优化最小二乘支持向量机故障诊断分类预测 目录 分类预测 | Matlab实现KPCA-ISSA-LSSVM基于核主成分分析和改进的麻雀搜索算法优化最小二乘支持向量机故障诊断分类预测分类效果基本描述程序设计参考资…

手拉手Vite+Vue3+TinyVue+Echarts+TailwindCSS

技术栈springboot3hutool-alloshi-coreVue3viteTinyVueEchartsTailwindCSS软件版本IDEAIntelliJ IDEA 2022.2.1JDK17Spring Boot3.1hutool-all5.8.18oshi-core6.4.1Vue35.0.10vite5.0.10axios1.6.7echarts5.4.3 ECharts是一个使用 JavaScript 实现的开源可视化库&#xff0c;可…

AndroidStudio 2024-2-21 Win10/11最新安装配置(Kotlin快速构建配置,gradle镜像源)

AndroidStudio 2024 Win10/11最新安装配置 教程目的&#xff1a; (从安装到卸载) &#xff0c;针对Kotlin开发配置&#xff0c;gradle-8.2-src/bin下载慢&#xff0c;以及Kotlin构建慢的解决 好久没玩AS了,下载发现装个AS很麻烦,就觉得有必要出个教程了(就是记录一下:嘻嘻) 因…

python + selenium/appnium

Selenium 的自动化原理: selenium 自动化流程: 自动化程序调用Selenium 客户端库函数&#xff08;比如点击按钮元素&#xff09;客户端库会发送Selenium 命令 给浏览器的驱动程序浏览器驱动程序接收到命令后 ,驱动浏览器去执行命令浏览器执行命令浏览器驱动程序获取命令执行的…

封装(encapsulation)

封装[encapsulation] 封装介绍封装好处封装的实现步骤&#xff08;三步&#xff09;入门案例封装与构造器 封装介绍 封装就是把抽象的数据[属性]和对数据的操作[方法]封装在一起&#xff0c;数据被保护在内部&#xff0c;程序的其它部分只有通过被授权的操作[方法]&#xff0c;…

每天一个知识点 - 如何快速熟悉后端项目

入职一家新公司的时候&#xff0c;不可避免的就是接触到新公司的项目&#xff0c;有些项目一启动就是好几年&#xff0c;业务功能极其复杂&#xff0c;下面我总结几个方法让大家快速熟悉后端项目&#xff08;图文结合&#xff09; 用例图简析 用例是系统中的一个功能单元&…

智慧应急:提升灾害防范与应对能力的关键之举

目录 一、引言 二、智慧应急的内涵与特点 三、智慧应急在灾害防范中的应用 1、风险评估与监测预警 2、应急预案制定与演练 3、灾害风险宣传与教育 四、智慧应急在灾害应对中的应用 1、快速响应与决策支持 2、资源优化与调配 3、灾后恢复与重建 五、智慧应急面临的挑…

运维SRE-19 网站Web中间件服务-http-nginx

Ans自动化流程 1.网站集群核心协议&#xff1a;HTTP 1.1概述 web服务&#xff1a;网站服务&#xff0c;网站协议即可. 协议&#xff1a;http协议,https协议 服务&#xff1a;Nginx服务&#xff0c;Tengine服务....1.2 HTTP协议 http超文本传输协议&#xff0c;负责数据在网站…

NXP实战笔记(七):S32K3xx基于RTD-SDK在S32DS上配置ICU输入捕获

目录 1、概述 2、输入捕获SDK配置 2.1、SAIC中断方式 2.2、IPWM或者IPM 1、概述 输入捕获&#xff0c;可以抓取高电平时间、低电平时间、占空比、周期、边沿检测与回调函数、边沿计数&#xff08;ABZ解码&#xff09;、时间戳、唤醒中断。 记录一下根据Emios模块实现上述部分…

应对电脑重新分区文件消失:预防措施、常见成因与恢复关键要点

电脑重新分区文件不见了是一个常见的问题&#xff0c;通常发生在用户对硬盘进行重新分区、格式化或操作系统重装过程中&#xff0c;可能导致已存在的文件和数据暂时不可见或永久丢失。 **预防文件丢失的方法&#xff1a;** 1. **提前备份**: 在进行任何重大磁盘操作前&#xff…

3分钟看懂设计模式01:策略模式

一、什么是策略模式 定义一些列算法类&#xff0c;将每一个算法封装起来&#xff0c;并让它们可以互相替换。 策略模式让算法独立于使用它的客户而变化&#xff0c;是一种对象行为型模式。 以上是策略模式的一般定义&#xff0c;属于是课本内容。 在没有真正理解策略模式之…