使用IoC與DI有何意義? (五) 透過設定實現注入
這一篇文章,照說應該接在之前寫過的 這篇 之後。但沒想到是,上一篇已經是 2020年的事情! 這連載也間隔太久了,哈。 在理解了DI的原理,並且知道注入的做法之後,我們繼續往下看,如果要動態實踐注入,該如何進行? 先前我們看到的程式碼中的注入,都是修改 program.cs 中的 AddTransient 來進行的,例如: serviceCollection . AddTransient < ISalaryFormula , SalaryFormula > ( ) ; 但如果我們想對 ISalaryFormula 這個介面,動態注入實作的類別,但不想改程式碼,可以怎麼做呢? 沒什麼複雜的,就是使用設定檔 appSettings.json,例如,我們可以建立這樣的配置: { "MyServiceConfig": { "MyServiceType": "consoleDI.SalaryFormula" } } 其中以字串描述了一個類別的路徑(NameSpace.ClassName),例如: “consoleDI.SalaryFormula” 如果要額外描述在哪一個組件(.dll)內,路徑則是 “NameSpace.ClassName, DllName” 有了設定之後,我們在主程式中,加入讀取該設定的程式碼(底下7-12行): public class Program { //這裡才是真正的進入點 main static void Main ( string [ ] args ) { //讀取appsettings.json中的設定,決定用哪一個類別實作 IConfiguration config = new ConfigurationBuilder ( ) . SetBasePath ( Directory . GetCurrentDirectory ( ) ) . AddJsonFile ( "appsettings.json" , optional : false ) ...