.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 @ 2022-05-25 16:11  ★Angel★  阅读(1540)  评论(0编辑  收藏  举报