.NET Core开发实战(第5课:依赖注入:良好架构的起点)--学习笔记(下)
05 | 依賴注入:良好架構(gòu)的起點
注冊完畢之后,想替換某些組件的某些部分時,可以使用 Replace 和 RemoveAll
services.AddSingleton<IOrderService>(new OrderService()); services.Replace(ServiceDescriptor.Singleton<IOrderService, OrderServiceEx>());// 替換掉注冊的第一個實現(xiàn)啟動程序,輸出如下:
獲取到服務(wù)實例:DependencyInjectionDemo.Services.OrderServiceEx:25560520從結(jié)果看出,注冊的 OrderService 被替換為 OrderServiceEx
下面介紹 RemoveAll
services.AddSingleton<IOrderService>(new OrderService()); services.AddSingleton<IOrderService, OrderServiceEx>(); services.RemoveAll<IOrderService>();// 移除所有 IOrderService 的注冊這種情況下程序會報錯,因為所有 IOrderService 的注冊被移除
Unable to resolve service for type 'DependencyInjectionDemo.Services.IOrderService'下面介紹如何注冊泛型模板
當(dāng)需要注冊一組泛型實現(xiàn)的時候
實際上注冊的時候并不知道泛型類的具體類型入?yún)?/p>
依賴注入框架為我們提供了泛型模板的注冊方式
通過一行代碼來注冊所有此泛型的具體實現(xiàn)
定義一個泛型接口
namespace DependencyInjectionDemo.Services {public interface IGenericService<T>{}public class GenericService<T> : IGenericService<T>{public T Data { get; private set; }public GenericService(T data){this.Data = data;}} }泛型模板注冊方法
services.AddSingleton(typeof(IGenericService<>), typeof(GenericService<>));它的生命周期與之前的注冊方式是一致的
不過它無法通過泛型 API 注冊
需要注冊兩個 service 的 type
第一個入?yún)⑹欠?wù)的類型
第二個入?yún)⑹欠?wù)實現(xiàn)的類型
接下來,看看如何在 controller 中使用
// 在構(gòu)造函數(shù)中添加兩個入?yún)?#xff0c;IOrderService 和 IGenericService // 通過斷點調(diào)試查看 genericService 的類型可得知,泛型的具體實現(xiàn)可以用容器里面的任意類型來替代 public WeatherForecastController(ILogger<WeatherForecastController> logger, IOrderService orderService, IGenericService<IOrderService> genericService) {_orderService = orderService;_logger = logger; }在 controller 中有兩種依賴注入的實例的獲取方式:
通過 controller 構(gòu)造函數(shù)注入
通過 [FromServices] 注入
當(dāng)定義一個 controller 的時候
它的服務(wù)是大部分接口都需要使用的情況下
推薦的做法是用構(gòu)造函數(shù)注入的方式
如果這個服務(wù)僅僅在某一個接口使用的情況下
推薦使用 [FromServices] 注入
GitHub源碼鏈接:
https://github.com/witskeeper/geektime/tree/master/samples/DependencyInjectionDemo
總結(jié)
以上是生活随笔為你收集整理的.NET Core开发实战(第5课:依赖注入:良好架构的起点)--学习笔记(下)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: 动态IL织入框架Harmony简单入手
 - 下一篇: asp.net core 使用newto