依赖注入-1

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
云原生内存数据库 Tair,内存型 2GB
云数据库 Redis 版,经济版 1GB 1个月
简介: 这里不在介绍依赖注入的基本概念,这里网上/官网上面有很多。

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

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

方案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
相关文章
|
9月前
|
XML Java 数据格式
依赖注入~
依赖注入~
|
9月前
|
Java 测试技术 容器
Spring框架-ObjectProvider更加宽泛的依赖注入
从上面的过程中我们可以看出,但Spring中某个Bean的依赖类型为ObjectProvider时,我们不需要提供一个ObjectProvider类型的Bean到容器中,只需要提供一个T类型的Bean到容器中,容器会自动将其包装成一个ObjectProvider,然后注入到依赖中
124 0
|
2月前
|
容器
IOC 控制反转和DI依赖注入
IOC 控制反转和DI依赖注入
|
设计模式 Java Spring
|
Java Maven
SpringFrame-ioc 依赖注入
SpringFrame-ioc 依赖注入
|
容器
05 依赖注入-自动装配
用于引用类型的依赖注入
61 0
|
SQL 开发框架 安全
3.1依赖注入
传统开发中,对象都是开发者创建组装,开发者必须了解各类的使用方法且某些类的耦合度较高,例如想把sql serve数据库改为MySql数据库则需要更改某些代码。控制反转的目的是让框架完成对象的创建和组装。从“我创建对象”编程“我要对象”
|
程序员 容器
控制反转与依赖注入
控制反转与依赖注入
112 0
控制反转与依赖注入
|
自动驾驶 小程序 Java
什么是控制反转(IOC)?什么是依赖注入?
什么是控制反转(IOC)?什么是依赖注入?
什么是控制反转(IOC)?什么是依赖注入?
|
Java 程序员 数据库
依赖注入IOC
依赖注入IOC