DependencyContext.Default使用Assembly.GetEntryAssembly()探测组件加载。对于在Kestrel下运行的ASP.NET Core应用程序,它是一个控制台应用程序,所以有一个有效的入口程序集。
在单元测试环境中,其中在AppDomain被创建并加载到运行在隔离的试验中,所创建的应用程序域不具有条目组件。为了设置进入组装,因为你没有访问AppDomain中创建代码,你必须建立你的启动类之前,使用了一下反思:
// http://dejanstojanovic.net/aspnet/2015/january/set-entry-assembly-in-unit-testing-methods/
AppDomainManager manager = new AppDomainManager();
FieldInfo entryAssemblyfield = manager.GetType()
.GetField("m_entryAssembly", BindingFlags.Instance | BindingFlags.NonPublic);
entryAssemblyfield?.SetValue(manager, typeof(Startup).Assembly);
AppDomain domain = AppDomain.CurrentDomain;
FieldInfo domainManagerField = domain.GetType()
.GetField("_domainManager", BindingFlags.Instance | BindingFlags.NonPublic);
domainManagerField?.SetValue(domain, manager);
之前,你的单元测试代码只是把这个创建或调用Startup类。
你能提供更多关于你的项目的信息吗?例如:project.json,测试方法,您用于测试的工具,等等。 –