• .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() 方法获取注入对象


  • 相关阅读:
    【IDEA】(4)---很好用的DEBUG功能
    【IDEA】(3)---非常实用提高开发效率和水平的插件
    【IDEA】(2)---MAC代码模版
    【IDEA】(1)---MAC下常用快捷键
    Shell(2)—数组
    MySQL(12)---纪录一次left join一对多关系而引起的BUG
    MySQL(11)---约束
    Shell(1)---变量
    算法(2)---算法复杂度理论
    MySQL(10)---自定义函数
  • 原文地址:https://www.cnblogs.com/yaoweijun/p/16309524.html
Copyright © 2020-2023  润新知