依赖注入-1

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 这里不在介绍依赖注入的基本概念,这里网上/官网上面有很多。

这里不在介绍依赖注入的基本概念,这里网上/官网上面有很多。

一个接口多个实现依赖注入的问题?

方案1:

这里通过区分标识就可以了.

如:

publicinterface IRedisMessage {     T Get<T>(string key);    } publicclass CSRedis:IRedisMessage {    public T Get<T>(string key)    {       return RedisHelper.Get<T>(key);    } }publicclass  StackExchangeRedis:IRedisMessage {    public T Get<T>(string key)    {       return db.StringGet(key);    } }

在服务注册的时候 ConfigureServices中

//这里我们需要这样写,常规写法就是正常的服务注册,这里不在写。直接写方案services.AddSingleton<IRedisManager,CSRedis>();

services.AddSingleton<IRedisManager,StackExchangeRedis>();

services.AddSingleton(factory => { Func< string, IRedisManager> accesor = key => {if(key.Equals( "CSRedis")) {   return factory.GetService<CSRedis>();
} else if(key.Equals(
"StackExchangeRedis")) {   return factory.GetService<StackExchangeRedis>();
}
else{ thrownewArgumentException($ "Not Support key : {key}");

} };

return accesor;

});

具体实现

private IRedisMananger _iRedisA; private IRedisMananger _iRedisB; privatereadonlyFunc< string, IRedisMananger > _serviceAccessor; publicValuesController(Func<string, IDemoService> serviceAccessor){ this._serviceAccessor = serviceAccessor;  _iRedisA= _serviceAccessor( "CSRedis");  _iRedisB= _serviceAccessor( "StackExchangerRedis"); }

方案2:

private IRedisMananger _iRedisA; private IRedisMananger _iRedisB; publicValuesController(IEnumber<IRedisMananger > redisMessages){   _iRedisA= redisMessages.FirstOrDefault(h=>h.GetType(),Name--"CSRedis");  _iRedisB= redisMessages.FirstOrDefault(h=>h.GetType(),Name--"StackExchangerRedis"); }

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
XML Java 数据格式
依赖注入~
依赖注入~
|
Java 测试技术 容器
Spring框架-ObjectProvider更加宽泛的依赖注入
从上面的过程中我们可以看出,但Spring中某个Bean的依赖类型为ObjectProvider时,我们不需要提供一个ObjectProvider类型的Bean到容器中,只需要提供一个T类型的Bean到容器中,容器会自动将其包装成一个ObjectProvider,然后注入到依赖中
191 0
|
2月前
|
设计模式 Java 开发者
面向切面编程和依赖注入
【9月更文挑战第6天】在软件开发中,面向切面编程(AOP)和依赖注入(DI)是提升代码可维护性、可扩展性和可测试性的关键概念。AOP 通过将横切关注点(如日志记录、事务管理)从业务逻辑中分离并模块化管理,增强了代码的清晰度和灵活性;DI 则通过外部容器管理对象间的依赖关系,降低了对象耦合度,使代码更易测试和维护。两者结合使用能显著提升软件开发效率和质量。
|
3月前
|
设计模式 测试技术 容器
依赖注入与控制反转:理解与应用
【8月更文挑战第22天】
124 0
|
设计模式 Java Spring
依赖注入
依赖注入
|
Java Maven
SpringFrame-ioc 依赖注入
SpringFrame-ioc 依赖注入
|
容器
05 依赖注入-自动装配
用于引用类型的依赖注入
77 0
|
SQL 开发框架 安全
3.1依赖注入
传统开发中,对象都是开发者创建组装,开发者必须了解各类的使用方法且某些类的耦合度较高,例如想把sql serve数据库改为MySql数据库则需要更改某些代码。控制反转的目的是让框架完成对象的创建和组装。从“我创建对象”编程“我要对象”
|
程序员 容器
控制反转与依赖注入
控制反转与依赖注入
128 0
控制反转与依赖注入
|
XML 架构师 关系型数据库