2023年11月9日 星期四

.NET Core Console Application 使用依賴注入(一)

在 ASP.Net Core 專案很自然就使用依賴注入機制(DI),但若是其他應用程式例如 Console 專案,

又該如何使用依賴注入機制,這邊稍微紀錄一下



首先創建一個Console 應用程式,並且透過nuget 安裝套件 Microsoft.Extensions.DependencyInjection

專案資訊如下


再來弄一些類別,IPaymentService、ILoggerService、PaymentService、LoggerService





其中 PaymentService 類別的 Pay() 方法裡面透過 LoggerService 類別的Log() 方法  來紀錄Log,

這邊直接透過 Console.Write() 方便檢視;對了,LoggerService 類別會需要PaymentService 的建構式

注入進來


接著來到 Program.cs 檔案的 Main() 方法,內容如下圖,最上方記得 using 


其中透過 ServiceCollection 物件來存放預計註冊的服務,並且取得提供者,後面透過 provider 取得指定

的服務,最後呼叫對應的方法


執行結果如下


以上有個小細節,可以取得的 paymentService 物件會是 null



另外指定的注入生命週期同樣有三種

  • Transient:每次注入相同類型(Type)的物件,都是新的實體

  • Singleton:應用程式啟動後,任何地方取得該類型的物件都是同一份(生命週期與應用程式相同)

  • Scoped:應用程式(服務)被呼叫時(request),該趟請求(request)中注入的相同類型物件都會是同個實體




若此時有個情境希望類別來代表「主要任務」例如 App.cs,其中會注入 PaymentService 類別,

並且方法 Run() ,代表啟動任務,須注意 App Class 沒有任何繼承


而 Program.cs 檔案需要新增註冊 App 類別


執行結果


以上就是簡單介紹如何使用內建的注入套件


【參考】

沒有留言:

張貼留言