Pregunta

previamente he hecho una pregunta aquí sobre autofac no disponiendo mis objetos cuando la petición HTTP termina. Ahora que tengo un problema mayor, becuasse hay evidencia de que se está sirviendo la solicitud para tomar la solicitud de un mismo objeto. Una vez más, estoy usando arreglan sus instrucciones aquí . Mi prueba es un poco más complejo porque estoy usando la sintaxis delegado para crear un objeto pero creo que estoy marcándola para la solicitud de la vida. 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;

Mi intención es registrar IDBConnectionSelector para obtener los CachingDBConnections tipo de hormigón creadas con un constructor de encargo, pero con la petición HTTP alcance.

Algunos de los métodos CachingDBConnections objeto está fallando en posteriores peticiones de una manera que me lleva a creer que estoy recibiendo el mismo que me dieron la última vez y no uno nuevo para cada solicitud.

¿Tiene sentido? ¿Qué estoy haciendo mal?

¿Fue útil?

Solución 2

he descubierto!

I estaba pidiendo el contenedor equivocado para la instancia de objeto - que estaba pidiendo la aplicación-contenedor para el objeto y no la solicitud-contenedor

.

D'oh!

Otros consejos

La mayoría de las veces esto sucede (en cualquier contenedor COI) se dará cuenta de que uno de los componentes a lo largo de una cadena de dependencias es un producto único.

por ejemplo.

A -> B -> C

Si A es 'fábrica', B es 'Singleton' y C es 'fábrica', a continuación, la solución de un obtendrá una referencia al Singleton B, que siempre se hará referencia a la misma C.

Para que un nuevo C para ser creado cada vez que se resuelva A, B también debe ser 'fábrica'.

¿Cómo está mi conjetura? Es este el problema?

Nick

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top