L'unité PerRequestLifetimeManager de ré-utilisation de l'objet dans différentes demandes

J'ai mis en place une Unité d'injection de dépendance pour notre projet. Le projet lui-même est un ASP.NET application qui utilise à la fois MVC et Web API.

Pour le contexte de base de données, je suis en utilisant le PerRequestLifetimeManager. Ceci est fait de sorte que les différents morceaux de la logique d'entreprise utilisent le même contexte (et donc la même opération).

Afin d'être en mesure d'utiliser le PerRequestLifetimeManager, j'ai ajouté des références pour les packages nuget l'Unité de programme d'amorçage pour ASP.NET MVC et l'Unité de programme d'amorçage pour ASP.NET l'API Web.

Pour l'utilisation de cette vie de manager dans l'API Web, la ligne suivante a été ajoutée au code de démarrage:

Microsoft.Web.Infrastructure.DynamicModuleHelper.DynamicModuleUtility.RegisterModule(typeof(UnityPerRequestHttpModule));

L'Unité de conteneur est mis en place pour les deux MVC et Web API:

var container = BuildUnityContainer();
GlobalConfiguration.Configuration.DependencyResolver = new Microsoft.Practices.Unity.WebApi.UnityDependencyResolver(container);
System.Web.Mvc.DependencyResolver.SetResolver(new Microsoft.Practices.Unity.Mvc.UnityDependencyResolver(container));

Dans la construction de l'Unité de conteneur, le contexte de base de données est configuré pour être résolu par la demande de la manière suivante:

container.RegisterType<IDataContext>(new PerRequestLifetimeManager(),
    new InjectionFactory(c =>
    {
        //Some code
        return new DataContext(/* params */);
    }
));

Cependant, il semble que ce code n'est pas de me donner une nouvelle DataContext pour chaque demande. Il me donne le même contexte, dans des endroits différents à l'intérieur d'une seule requête (qui est très bien). Cependant, à la suite (api web) demandes ont la même instance de DataContext où je m'attends à un nouveau à être créé pour chaque nouvelle demande. Je voudrais également s'attendre à la DataContext à être éliminés après la demande n'est pas terminée (la classe implémente IDisposable).

Ce qui se passe ici? Je manque un peu de configuration à faire ce travail correctement? Ou n'est-ce pas censé travailler à la manière dont je m'attendre?

Il a probablement des caches de la InjectionFactory appel. Pouvez-vous l'essayer sans elle? J'imagine que le problème va être que vous voulez avoir des paramètres différents.

OriginalL'auteur René Wolferink | 2014-11-21