gpt4 book ai didi

asp.net-core - DependencyContext.Default 在.net core测试项目中抛出错误

转载 作者:行者123 更新时间:2023-12-01 16:28:24 24 4
gpt4 key购买 nike

我有一个测试项目来测试.net core WebAPI。 WebAPI 项目中的 DependencyContext.Default 抛出错误

Value cannot be null.
Parameter name: assembly

事情发生在

   at Microsoft.Extensions.DependencyModel.DependencyContextLoader.Load(Assembly assembly)
at System.Lazy`1.CreateValue()
at System.Lazy`1.LazyInitValue()
at

测试项目可能没有 DI 解析器作为没有入口点吗?

最佳答案

DependencyContext.Default 使用 Assembly.GetEntryAssembly() 来探测要加载的程序集。对于 Kestrel 下运行的 ASP.NET Core 应用程序,它是一个控制台应用程序,因此具有有效的入口程序集。

在单元测试环境中,创建并加载 AppDomain 以单独运行测试,创建的 AppDomain 没有入口程序集。为了设置入口程序集,由于您无权访问 AppDomain 创建代码,因此您必须在构建 Startup 类之前使用一些反射:

// 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 类之前即可。

关于asp.net-core - DependencyContext.Default 在.net core测试项目中抛出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40502080/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com