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,測試方法,您用於測試的工具,等等。 –