In meinen Integrationstests verwende ich denselben SimpleInjector.Container, den ich in dem Web-API-Projekt erstelle, das ich gerade teste.container.RegisterWebApiControllers (GlobalConfiguration.Configuration) verursacht InvalidOperationException
Aber diese Linie in der Zusammensetzung Wurzelklasse:
container.RegisterWebApiControllers(GlobalConfiguration.Configuration);
verursacht eine Ausnahme:
System.TypeInitializationException : The type initializer for 'MyProject.Api.Test.Integration.HttpClientFactory' threw an exception.
---- System.InvalidOperationException : This method cannot be called during the application's pre-start initialization phase.
Result StackTrace:
at MyProject.Api.Test.Integration.HttpClientFactory.Create()
at MyProject.Api.Test.Integration.Controllers.ProductControllerIntegrationTest.<GetProductBarcode_Should_Return_Status_BadRequest_When_Barcode_Is_Empty>d__0.MoveNext() in d:\Projects\My\MyProject.Api.Test.Integration\Controllers\ProductControllerIntegrationTest.cs:line 26
----- Inner Stack Trace -----
at System.Web.Compilation.BuildManager.EnsureTopLevelFilesCompiled()
at System.Web.Compilation.BuildManager.GetReferencedAssemblies()
at System.Web.Http.WebHost.WebHostAssembliesResolver.System.Web.Http.Dispatcher.IAssembliesResolver.GetAssemblies()
at System.Web.Http.Dispatcher.DefaultHttpControllerTypeResolver.GetControllerTypes(IAssembliesResolver assembliesResolver)
at System.Web.Http.WebHost.WebHostHttpControllerTypeResolver.GetControllerTypes(IAssembliesResolver assembliesResolver)
at SimpleInjector.SimpleInjectorWebApiExtensions.GetControllerTypesFromConfiguration(HttpConfiguration configuration)
at SimpleInjector.SimpleInjectorWebApiExtensions.RegisterWebApiControllers(Container container, HttpConfiguration configuration)
at MyProject.Api.ContainerConfig.RegisterTypes(Container container) in d:\Projects\My\MyProject.Api\App_Start\ContainerConfig.cs:line 128
at MyProject.Api.ContainerConfig.CreateWebApiContainer() in d:\Projects\My\MyProject.Api\App_Start\ContainerConfig.cs:line 63
at MyProject.Api.Test.Integration.HttpClientFactory..cctor() in d:\Projects\My\MyProject.Api.Test.Integration\HttpClientFactory.cs:line 17
Nachdem es zu kommentieren alles funktioniert gut, sowohl den Web-App selbst und die Tests.
Die Frage ist also:
- Was ist der Grund für die Ausnahme ist?
- (Und ist diese Methode wirklich erforderlich?)
für HttpClientFactory der Code Hier ist (eine Hilfsklasse Httpclient mit der richtigen Header, wie api Schlüssel oder Berechtigung zum Anlegen):
internal static class HttpClientFactory
{
private static readonly Container _container = ContainerConfig.CreateWebApiContainer();
public static HttpClient Create()
{
var client = new HttpClient { BaseAddress = GetUrl() };
//...
return client;
}
}
Können Sie die InnerException- und StackTrace-Details posten? Haben Sie verbindliche Redirects in Ihrer Konfigurationsdatei? –
Ich stimme @DarinDimitrov zu, bitte geben Sie uns die volle Stack-Trace. Ohne diese Details ist es schwierig, darüber nachzudenken. – Steven
@Darin: Aktualisiert, danke! Bindungsumleitungen sind denen in Web.config sehr ähnlich. – abatishchev