Question

J'ai déjà posé une question ici sur autofac ne disposant pas mes objets lorsque la requête HTTP se termine. Je pense que maintenant j'ai un problème plus grand, becuasse il existe des preuves qu'il sert la demande à la demande objet SAME. Encore une fois, je me sers thier instructions . Mon test est un peu plus complexe parce que je suis en utilisant la syntaxe de délégué pour créer un objet, mais je pense que je suis pour la demande signalant-vie. Global.asax.cs:

protected void Application_Start(object sender, EventArgs e)
{
    ...
    var builder = new Autofac.Builder.ContainerBuilder();
    builder.Register<IDBConnectionSelector>(
            (c) => new CachingDBConnections(ConstructorArgs...))
        .HttpRequestScoped();

    var container = builder.Build();
    _containerProvider = new ContainerProvider(container);
}
public IContainerProvider ContainerProvider
{
    get { return _containerProvider; }
}
static IContainerProvider _containerProvider;

Mon intention est ici pour vous inscrire IDBConnectionSelector pour obtenir les CachingDBConnections de type béton créé avec un constructeur personnalisé mais avec la portée de la requête HTTP.

Certaines méthodes de l'objet CachingDBConnections échoue sur les demandes ultérieures d'une manière qui me porte à croire que je reçois le même que je suis arrivé la dernière fois et pas une nouvelle pour chaque demande.

Est-ce logique? Qu'est-ce que je fais mal?

Était-ce utile?

La solution 2

I figured it out!

Je demandais le récipient mauvais pour l'instance d'objet - je demande au conteneur d'application de l'objet et non la demande conteneur

.

D'oh!

Autres conseils

La plupart du temps cela se produit (dans un conteneur IoC) vous trouverez qu'un composant le long d'une chaîne de dépendances est un singleton.

par exemple.

A -> B -> C

Si A est « usine », B est « singleton » et C est « usine », puis la résolution A va obtenir une référence au singleton B, qui sera toujours la même référence C.

Pour un nouveau C pour obtenir créé chaque fois que vous résolvez A, B doit aussi être « usine ».

Comment est ma conjecture? Est-ce le problème?

Nick

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top