.net6.0 中一个接口多个实现的服务注册与注入

1.现有一个数据库操作接口 如下 

 
它有两个数据操作实现 Sqlserver 和MySql的数据库操作实现类

 

 

 

 

现在我们需要 将这个两个类 注册到MVC中

 

 注意这里注册的服务类型都是 IDataBase 这个接口类型 而实现类用的分别是SqlserverDataBase 和 MySqlDataBase

那么我们在 注入服务的时候 就需要写集合形式 不能是接口形式 

 

 

 

 注意 如果使用方法参数注入 方法参数需要添加[FromService] 特性 指定参数来自服务

 

批量注册多个服务 优化方法

如果我们需要在容器中一次注册多个服务 我们可以使用键值对集合将 服务名和对象进行保存然后 注册这个处理类就可以了 类似于服务工厂

 

 

 

 

 

 

 那么我们调用时 就直接注入 工厂对象 再用这个工厂对象来获取数据库操作对象

 

 总结:

1.一个接口多个实现注册服务后 在构造函数注入时 需要使用IEnumable<>  的形式获取服务集合 再进行筛选获取需要的服务对象

2.当需要注册的服务很多时,我们可以通过使用类似工厂模式 将需要的服务添加到工厂集合中 在 注册工厂服务类 通过注入工厂服务来获取其他服务

3. .net 中提倡使用构造函数形式对服务进行注入 但是如果我们需要在方法中注入服务时 我们可以在方法的参数前 添加 [FromService] 特性来指明是服务注入对象  

public void Test([FromService] IService servie){

  //使用service 对象

}

4.我们在Controller 的Action 中使用服务 可以通过HttpContext 中的 RequestService   对象 通过GetService() 方法获取注入对象

 

 

 


 

posted @   ★Angel★  阅读(1701)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
历史上的今天:
2018-05-25 JS倒计时(刷新页面不影响)的实现思路
2018-05-25 H5 页面 上使用js实现一键复制功能
点击右上角即可分享
微信分享提示