.net core中使用Type.GetType()從字符串獲取類型遇到的問題


問題背景是想在 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" ,問題就解決了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM