文章出處
文章列表
問題背景是想在 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" ,問題就解決了。
文章列表
全站熱搜