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