DependencyContext.Default在.NET核心测试项目中抛出错误

时间:2016-11-09 07:44:33

标签: asp.net-core

我有一个测试.net核心WebAPI的测试项目。 WebAPI项目中的margin: 10px auto 20px引发错误

DependencyContext.Default

发生在

Value cannot be null.
Parameter name: assembly

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

1 个答案:

答案 0 :(得分:5)

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类之前,只需将其放入。