首页 新闻 赞助 找找看

ServiceCollection里有这个类型为什么GetService得到的是null?

0
悬赏园豆:20 [已解决问题] 解决于 2019-12-15 15:06

如题,调试时的截图如下

问题补充:

溪爸的主页 溪爸 | 初学一级 | 园豆:134
提问于:2019-12-15 03:03
< >
分享
最佳答案
0

下面的代码没这个问题

class Program
{
    static void Main(string[] args)
    {
        var services = new ServiceCollection();
        services.AddTransient<QuestionService>();

        var questionService = services.BuildServiceProvider().GetService(typeof(QuestionService));
        Console.WriteLine(questionService);
    }
}

public class QuestionService
{
}
收获园豆:20
dudu | 高人七级 |园豆:31075 | 2019-12-15 11:22

苦战8小时后来找到原因,因为系统通过反射自动注入,Assembly.LoadFile得到的跟系统自己得到的Assembly、Type的HashCode是可能不一样的,而ServiceProvider是通过内部保存的Dictionary来判断的,Dictionary的key为Type,判断是否有这个key是通过Type的HashCode一样来判断的。所以出现了上面让人上火的一幕,改成Assembly.LoadFrom就好了

溪爸 | 园豆:134 (初学一级) | 2019-12-15 11:56
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册