Domanda

Ho già fatto una domanda qui circa autofac non smaltire i miei oggetti quando la richiesta HTTP finisce. Ora credo di avere un problema più grande, becuasse ci sono prove che si sta servendo la richiesta di intervento richiesta allo stesso oggetto. Anche in questo caso, io sto usando appenderci istruzioni qui . La mia prova è un po 'più complessa perché sto utilizzando la sintassi delegato per creare un oggetto, ma penso di segnalazione per richiesta di-vita. 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;

La mia intenzione è quella di registrare IDBConnectionSelector per ottenere il tipo CachingDBConnections concreti creati con un costruttore personalizzato ma con richiesta HTTP campo di applicazione.

Alcuni metodi dei CachingDBConnections oggetto sta fallendo su richieste successive in un modo che mi porta a credere che sto ottenendo lo stesso che ho ottenuto l'ultima volta e non uno nuovo per ogni richiesta.

Ha senso? Che cosa sto facendo di sbagliato?

È stato utile?

Soluzione 2

ho capito!

Mi è stato chiesto il contenitore sbagliato per l'istanza dell'oggetto - mi è stato chiesto l'applicazione contenitore per l'oggetto e non la richiesta-container

.

D'oh!

Altri suggerimenti

La maggior parte delle volte questo accade (in qualsiasi contenitore CIO) vi accorgerete che un componente lungo una catena di dipendenze è un Singleton.

per es.

A -> B -> C

Se A è 'fabbrica', B è 'Singleton' e C è 'fabbrica', quindi la risoluzione di un otterrà un riferimento al Singleton B, che sarà sempre riferimento allo stesso C.

Al fine di una nuova C per avere creato ogni volta che si risolve A, B deve anche essere 'fabbrica'.

Come sta la mia ipotesi? E 'questo il problema?

Nick

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top