2016-09-19 2 views
0

J'essaie d'étendre mes services par requête, mais mes services injectés semblent toujours être limités au conteneur parent/racine, et les requêtes suivantes voient le état d'une demande précédente.Configurer par requête/conteneur imbriqué StructureMap utilisant le noyau asp.net

J'ai installé un conteneur StructureMap personnalisé dans ma classe de démarrage

// Wireup the container 
Container = new Container(); 
Container.Configure(config => 
{ 
    // register the dotnet framework registered services into our container 
    config.Populate(services); 

    // Import all the registries 
    config.Scan(scanner => 
    { 
     scanner.TheCallingAssembly(); 
     scanner.LookForRegistries(); 
    }); 
}); 

return Container.GetInstance<IServiceProvider>(); 

Inscrivez-vous un service dans un registre comme;

For<ITest>().Use<Test>().ContainerScoped(); 

Puis wiredup le middleware suivant

var container = serviceProvider.GetRequiredService(typeof(IContainer)) as IContainer; 
if (container != null) 
{ 
    using (var requestContainer = container.GetNestedContainer()) 
    { 
     context.RequestServices = requestContainer.GetInstance<IServiceProvider>(); 
     await _next.Invoke(context); 
    } 
} 
else 
{ 
    await _next.Invoke(context); 
} 

Tous les pointeurs sur ce que je suis absent? Merci

Répondre

1

Vous n'avez pas besoin de câbler la propriété RequestServices vous-même. L'hôte ASP.NET le fait déjà pour vous. Il vous suffit de résoudre ce dont vous avez besoin auprès du fournisseur RequestServices existant.