2017-09-15 2 views
0

J'ai un projet d'API Web qui utilise Unity comme GlobalConfiguration.Configuration.DependencyResolver. Le projet utilise le modèle Unité de travail avec une seule couche d'accès aux données conservée en mémoire pendant toute la durée de vie de chaque requête. À la fin de chaque requête, des événements sont déclenchés, je veux exécuter les événements en utilisant leur propre couche d'accès aux données unique afin qu'ils puissent être exécutés en parallèle (le partage provoque des problèmes de concurrence). Comment créer une portée de vie enfant dans un contexte de requête HTTP?Étendue de durée de vie imbriquée créée avec Unity DI

J'ai accès à une instance statique de UnityDependencyResolver qui a la méthode IDependencyScope BeginScope(), mais étant donné qu'il implémente System.Web.Http.Dependencies.IDependencyResolver, il semble que ce n'est pas l'option correcte?

Avec d'autres cadres de DI tels que Autofac, ce serait:

using(var scope = container.BeginLifetimeScope()) 
{ 
    var service = scope.Resolve<IService>(); 

    using(var nestedScope = scope.BeginLifetimeScope()) 
    { 
    var anotherService = nestedScope.Resolve<IOther>(); 
    } 
} 

Je préférerais passer les événements à un processus différent et le feu par les files d'attente de messages, mais il est impossible à ce moment.

Répondre