论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
应用中心
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
IT评测·应用市场-qidao123.com技术社区
»
论坛
›
软件与程序人生
›
后端开发
›
.Net
›
解析 ABP vNext 依赖注入实现【属性注入】的原理 ...
解析 ABP vNext 依赖注入实现【属性注入】的原理
瑞星
论坛元老
|
2024-5-19 14:51:30
|
显示全部楼层
|
阅读模式
楼主
主题
1683
|
帖子
1683
|
积分
5049
前言
这几天闲来没事看看ABP vNext的文档和源码,关于关于依赖注入
(属性注入)
这块儿产生了兴趣。
我们都知道。Volo.ABP 依赖注入容器使用了第三方组件Autofac实现的。有三种注入方式,构造函数注入和方法注入和属性注入。
ABP的属性注入原则参考如下:
这时候我就开始疑惑了,由于我知道Autofac框架默认不开启隐式的属性注入,
那么ABP具体是哪里配置属性注入的呢?
接下来就是漫长的阅读源代码过程了。
解析源代码
首先我是用的是abp vNext的6.0.3版本,以下只列出关键代码
A. Autofac源码中属性注入的位置是在 AutowiringPropertyInjector 类的InjectProperties()方法下
此方法是通过Autofac开启的属性注入实现。 里面主要是通过反射读取当前类型对应的所有属性,判断当前属性是否能够举行注入。
比如 static,数组类型,值类型 是不必要注入的
从容器中IComponentContext中取得一个当前属性对应的实例
然后在通过反射调用set方法赋值
B. 查看调用链发现是RegistrationBuilder类的PropertiesAutowired()方法调用了InjectProperties()方法。
以上代码都是Autofac的源代码。 接下来开始是ABP vNext的源码了。
C: 继续查看调用链发现在ABP vNext代码中的 AbpRegistrationBuilderExtensions类下EnablePropertyInjection()调用了IRegistrationBuilder的PropertiesAutowired()方法。
当前方法的作用如下
检查实现类型地点的程序集是否包含任何 AbpModule 模块。
如果实现类型地点的程序集包含任何 AbpModule 模块,则启用属性注入,即调用 PropertiesAutowired() 方法。
最后返回修改后的注册构建器。
D: 继续查看调用链,发现在AbpRegistrationBuilderExtensions类的ConfigureAbpConventions方法开启了属性注入。
此方法是配置了ABP的一些约定,主要逻辑是:
首先,它从注册数据中获取服务类型和实现类型。
然后,它调用 EnablePropertyInjection 方法,根据特定条件启用属性注入。
接着,它调用 InvokeRegistrationActions 方法,执行注册操纵列表中的注册动作,该动作通常包罗自界说的服务注册逻辑。
最后返回修改后的注册构建器。
E: 继续查看调用链发现在AutofacRegistration类的Register方法调用了ConfigureAbpConventions()方法
Register方法的作用:根据 IServiceCollection 中的服务形貌符将服务注册到 Autofac 容器构建器中,并根据 Abp 的约定举行一些配置。Autofac 是一个 .NET 的依赖注入容器,它允许
开发
者注册息争析各种类型的服务。
F: 同样在当前类下的Populate方法调用了Register方法
当前方法主要是将服务集合中的服务注册到 Autofac 容器构建器中,并举行一些必要的配置,以确保服务能够被精确地解析和管理。
G: 接下来是到了AbpAutofacServiceProviderFactory类,当前类的CreateBuilder方法调用了Populate方法。
H: 到了当前这一步,就会发现AbpAutofacServiceProviderFactory类继承了IServiceProviderFactory,当前类的作用就是用于界说 DI容器的提供程序。
其中CreateBuilder方法会在 WebApplication类在Builder时候自动运行,属于微软框架的逻辑了。
至此就搞明确了ABP vNext框架是怎样实现了属性注入了。
参考链接
ABP Dependency Injection
Autofac Property Injection
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
瑞星
论坛元老
这个人很懒什么都没写!
楼主热帖
复习一下Linux常用命令,孰能生巧~ ...
OpenSSL RSA相关基本接口和编程示例 ...
2022护网面试题总结
一次服务器被入侵的处理过程分享 ...
使用 Power Shell 修改 Hyper-V 虚拟机 ...
kubernetes入门
适用于顺序磁盘访问的1分钟法则 ...
Android studio 连接SQLite数据库 +创 ...
内网安全-横向移动(1)
Iceberg在袋鼠云的探索及实践 ...
标签云
集成商
AI
运维
CIO
存储
服务器
浏览过的版块
Java
程序人生
登录参与点评抽奖加入IT实名职场社区
下次自动登录
忘记密码?点此找回!
登陆
新用户注册
用其它账号登录:
关闭
快速回复
返回顶部
返回列表