zoukankan      html  css  js  c++  java
  • .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" ,问题就解决了。

  • 相关阅读:
    UVa 1331 最大面积最小的三角剖分
    UVa 1626 括号序列(矩阵连乘)
    POJ 3295 Tautology(构造法)
    POJ 2586 Y2K Accounting Bug(贪心)
    POJ 2109 Power of Cryptography
    abcd
    好数
    Gift
    密码游戏
    约瑟夫游戏
  • 原文地址:https://www.cnblogs.com/dudu/p/7750363.html
Copyright © 2011-2022 走看看