如题,调试时的截图如下
下面的代码没这个问题
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
{
}
苦战8小时后来找到原因,因为系统通过反射自动注入,Assembly.LoadFile得到的跟系统自己得到的Assembly、Type的HashCode是可能不一样的,而ServiceProvider是通过内部保存的Dictionary来判断的,Dictionary的key为Type,判断是否有这个key是通过Type的HashCode一样来判断的。所以出现了上面让人上火的一幕,改成Assembly.LoadFrom就好了