Nei test di integrazione sto utilizzando lo stesso SimpleInjector.Container che costruisco nel progetto Web API che sto testando.container.RegisterWebApiControllers (GlobalConfiguration.Configuration) causa InvalidOperationException
Ma questa linea in classe radice composizione:
container.RegisterWebApiControllers(GlobalConfiguration.Configuration);
causa un'eccezione:
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
Dopo aver commentato che tutto funziona bene, sia la web app in sé ed i test.
Quindi la domanda è:
- Qual è la ragione per l'eccezione?
- (ed è questo metodo necessario davvero?)
Ecco il codice per HttpClientFactory (una classe di supporto per creare HttpClient con le intestazioni appropriate, come la chiave API o autorizzazione):
internal static class HttpClientFactory
{
private static readonly Container _container = ContainerConfig.CreateWebApiContainer();
public static HttpClient Create()
{
var client = new HttpClient { BaseAddress = GetUrl() };
//...
return client;
}
}
Potrebbe pubblicare i dettagli InnerException e StackTrace? Avete alcuni reindirizzamenti vincolanti nel vostro file di configurazione? –
Sono d'accordo con @DarinDimitrov, per favore ci dia la traccia dello stack completo. È difficile ragionare su questo senza questi dettagli. – Steven
@Darin: aggiornato, grazie! I reindirizzamenti vincolanti sono molto simili a quelli che ho in Web.config. – abatishchev