ABP vNext 自动注入,暗藏天坑如斯

导言

我们在使用ABP vNext框架时,都知道该框架为我们实现了自动依赖注入(实现自动注入需要在项目里面创建Module类,并且将Module类上的DependsOn到相应的启动Module类或调用Module类,这步很关键)

自动注入示例

只要我们实现如下接口:
ITransientDependency 瞬时生命周期
ISingletonDependency 全局单例生命周期
IScopedDependency 作用域生命周期

public class Test : ITransientDependency
{//todo:....
}

天坑如斯

下面讲一下巨坑,那就是在自动注入的时候系统会自动推断要注入的接口,并且是你实现的所有的接口他都会注入也不是放在第一个实现的接口才会注入,而是根据接口的名字来判断的,比如下面的类就会以接口IUserRepository注入:

public class UserRepository: IUserRepository, ITransientDependency
{
}

同理下面的类型也会以接口IUserRepository注入:

public class EfCoreUserRepository: IUserRepository, ITransientDependency
{
}

但是下面这种情况就不能了

public class UserEfCoreRepository: IUserRepository, ITransientDependency
{
}

源码

Volo.Abp.DependencyInjection.ExposeServicesAttribute.cs

private static List<Type> GetDefaultServices(Type type)
{var serviceTypes = new List<Type>();foreach (var interfaceType in type.GetTypeInfo().GetInterfaces()){var interfaceName = interfaceType.Name;if (interfaceName.StartsWith("I")){interfaceName = interfaceName.Right(interfaceName.Length - 1);}if (type.Name.EndsWith(interfaceName)){serviceTypes.Add(interfaceType);}}return serviceTypes;
}

结论

能看出,推断方法是去掉接口名的“I”之后看这个类名是否是这个字符串结尾,如果是则注入,如果不是则不注入,并且将会递归他所有实现的接口,如果有多个接口都满足条件,则将会以这些接口进行注入。
还有一点就是实现了这三个自动依赖注入的接口的类型的,都将会以自身类型注入到容器

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

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

相关文章

Community Server系列之四:Ajax在CS2.0中的应用1

Ajax技术在时下很热门&#xff0c;当然在CS2.0中也不例外的运用到了此技术&#xff0c;CS2中没有使用任何第三方Ajax控件&#xff0c;这就给我们提供一个研究Ajax机理的好地方&#xff0c;现介绍一下在CS2中Ajax的一些简单应用&#xff0c;并分析应用的原理。 我想要研究此技术…

为什么人和人的差距这么大?

点击蓝字关注&#xff0c;回复“职场进阶”获取职场进阶精品资料一份这是一篇去年写的旧文&#xff0c;不少读者从这篇文章中获得了一些方法和力量&#xff0c;于是再分享下&#xff1a;工作和生活中不光要埋头干活&#xff0c;还要抬头看天。思考总结方法论是提升认知的必备途…

github可以传java吗_如何在github上传本地项目代码(新手使用)----亲测使用

首先你要在github上申请一个账号然后你要下载一个git工具进入官网直接下载就行&#xff0c;下载完成后进入github首页&#xff0c;点击新项目new repository(新建)&#xff0c;如下图所示&#xff1a;然后进入如下页面&#xff0c;主要填写红色圈起来的几个部分&#xff0c;如下…

英才评测 个人性格倾向 IT知识

网址http://www.01hr.com/testcenter/index_ccw.jsp?id9203&clid1135238483687 转载于:https://www.cnblogs.com/sutengcn/archive/2006/05/06/392790.html

【One by One系列】IdentityServer4(一)OAuth2.0与OpenID Connect 1.0

在微服务场景中&#xff0c;身份认证通常是集中处理&#xff0c;这也是有别于单体应用一把梭哈的模式&#xff0c;其中&#xff0c;在微软微服务白皮书中&#xff0c;提供了两种身份认证模式&#xff1a;网关&#xff0c;没错&#xff0c;原话是If youre using an API Gateway,…

php多进程 写入文件_PHP多进程中使用file_put_contents安全吗?

TL;DRLinux下&#xff0c;PHP多进程使用 file_put_contents() 方法记录日志时&#xff0c;使用追加模式(FILE_APPEND)&#xff0c;简短的日志内容不会重叠&#xff0c;即能安全的记录日志内容。file_put_contents() 使用 write() 系统调用实现数据的写入&#xff0c;write() 系…

虚拟机概述[转贴]

[摘要]描述什么是虚拟机、及运行在各种平台上的多种多样的虚拟机软件PXE2写著 你一定接触过各种各样的虚拟机&#xff0c;Vmware&#xff0c;VirtualPC&#xff0c;甚至JVM或是VBRunDLL&#xff0c;等等等等&#xff0c;在数字的信息世界里虚拟和现实是如此的难解难分。你一定接…

ABP vNext分布式事件总线RabbitMQ注意事项

[https://docs.abp.io/zh-Hans/abp/latest/Distributed-Event-Bus-RabbitMQ-Integration](ABP vNext官方文档链接)&#xff0c;基本使用可直接阅读官方文档&#xff0c;云怀不重复造轮子&#xff0c;只做官方未提到但重要的说明关键配置说明关键配置类&#xff1a;AbpRabbitMqE…

window运行php环境,Windows环境下使用phpstudy搭建php运行环境

首先在百度百科上对于phpstudy的定义是一个PHP调试环境的程序集成包。该程序包集成最新的ApachePHPMySQLphpMyAdminZendOptimizer,一次性安装&#xff0c;无须配置即可使用&#xff0c;是非常方便、好用的PHP调试环境&#xff0c;该程序不仅包括PHP调试环境&#xff0c;还包括了…

去除代码行号的一个小程序(控制台版本)

清风竹林发布了去除代码行号的一个小程序,确实方便大家收集一些文章代码,但个人认为象这样的小东东&#xff0c;要使广大网友能拿来就用&#xff0c;用.Net 2.0做成WinForm&#xff0c;有点贵族化了&#xff0c;于是动手整出个平民化的控制台版本&#xff0c;可以清除指定的文本…

. NET5实战千万高并发项目,性能吊打JAVA,C#排名万年老五,有望逆袭!

“秒杀活动”“抢红包”“微博热搜”“12306抢票”“共享单车拉新”等都是高并发的典型业务场景&#xff0c;那么如何解决这些业务场景背后的难点问题呢&#xff1f;秒杀系统中&#xff0c;QPS达到10万/s时&#xff0c;如何定位并解决业务瓶颈&#xff1f;明星婚恋话题不断引爆…

java不朽神迹,不朽的神迹 Eternal Legacy HD v1.0.8

游戏简介不朽的神迹是一个拥有全3D实时渲染的史诗战斗场面、360度自由调整的视角及丰富的动作特效的游戏。玩家将在游戏中探索壮丽的大陆&#xff0c;体验张力十足的战斗系统。游戏提供了多至3名角色同时参战&#xff0c;可从队伍成员中选择出战的队友&#xff0c;并且定义他们…

ABP vNext 审计日志获取真实客户端IP

背景在使用ABP vNext时&#xff0c;当需要记录审计日志时&#xff0c;我们按照https://docs.abp.io/zh-Hans/abp/latest/Audit-Logging配置即可开箱即用&#xff0c;然而在实际生产环境中&#xff0c;某些配置并不可取&#xff0c;比如今天的主角——客户端IP&#xff0c;记录用…

郭昶

郭 昶左直拳饰演《外来媳妇本地郎》中康家老二康祁宗的演员郭昶6月14日去世了&#xff0c;胃癌&#xff0c;享年50岁。这个消息真令人难以置信&#xff0c;不胜嘘唏。 《外来媳妇本地郎》在广东这边很受欢迎&#xff0c;每集结尾那带有浓厚岭南特色的粤曲小调在胡同小巷时有…

php 常用rpc框架,php的轻量级rpc框架yar

php的轻量级rpc框架yar目的&#xff1a;类方法的远程调用,也就是一个rpc请求。RPC本质上也是一个网络请求&#xff0c;既然是请求&#xff0c;对于效率来说&#xff0c;就需要考虑了。yar是基于http来做的。使用场景&#xff1a;多个项目共享model总的来说这种调用代价挺好的&a…

ABP vNext IOC替换原有Service实现

即 .NET IOC替换原有Service实现背景在使用ABP vNext时&#xff0c;该框架为我们实现了非常多的默认行为&#xff0c;以便开箱即用&#xff0c;但在实际使用中&#xff0c;我们总是需要根据自己的需求定制自己的服务&#xff0c;在.Net框架中&#xff0c;便提供了Service.Repla…

aqs java 简书,Java AQS源码解读

1、先聊点别的说实话&#xff0c;关于AQS的设计理念、实现、使用&#xff0c;我有打算写过一篇技术文章&#xff0c;但是在写完初稿后&#xff0c;发现掌握的还是模模糊糊的&#xff0c;模棱两可。痛定思痛&#xff0c;脚踏实地重新再来一遍。这次以 Java 8源码为基础进行解读。…

仓储模式到底是不是反模式?

【导读】仓储模式我们已耳熟能详&#xff0c;但当我们将其进行应用时&#xff0c;真的是那么得心应手吗&#xff1f;确定是解放了生产力吗&#xff1f;这到底是怎样的一个存在&#xff0c;确定不是反模式&#xff1f;一篇详文我们探讨仓储模式&#xff0c;这里仅我个人的思考&a…

网络工程师必须懂的十五大专业术语!

1、什么时候使用多路由协议&#xff1f; 当两种不同的路由协议要交换路由信息时&#xff0c;就要用到多路由协议。当然&#xff0c;路由再分配也可以交换路由信息。下列情况不必使用多路由协议&#xff1a; 从老版本的内部网关协议&#xff08; Interior Gateway Protocol&…

dnSpy反编译、部署调试神器

一、概要在工作当中&#xff0c;当程序部署了之后就算打了日志遇到极个别的特殊异常没有在程序日志中体现出来或者没有详细的报错原因会让开发者非常头疼&#xff0c;不得不盲猜bug到底出在哪里。这里分享一下工作上经常会用到的工具&#xff0c;这款工具可以反编译并运行调试已…