文章出處

問題背景是想在 appsettings.json 中動態配置依賴注入,依賴注入代碼如下:

services.AddSingleton(typeof(ISmsService), Type.GetType(Configuration["smsService"]));

appsettings.json 中的配置如下:

{
  "smsService": "Cnblogs.Sms.Aliyun.AliyunSmsService"
}

但程序運行時  Type.GetType(Configuration["smsService"]) 的值總是 null 。

改為用 Assembly.Load 先加載程序集( Cnblogs.Sms.Aliyun 是單獨的程序集)然后獲取類型,可以成功獲取。

services.AddSingleton(typeof(ISmsService), 
    Assembly.Load("Cnblogs.Sms.Aliyun").GetType(Configuration["smsService"]));

后來一想,只提供"Cnblogs.Sms.Aliyun.AliyunSmsService",.net core 運行時在進行反射操作時并不知道從哪個程序集加載這個類型,只會從當前程序集加載,當然找不到。所以,不僅要提供類型的完整名稱,還要提供程序集的名稱,Fully Qualified Type Name 就是為此而生。

將  "Cnblogs.Sms.Aliyun.AliyunSmsService"  改為  "Cnblogs.Sms.Aliyun.AliyunSmsService, Cnblogs.Sms.Aliyun" ,問題就解決了。

 


文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()