Pergunta

Eu fiz uma pergunta anteriormente aqui Sobre o Autofac não descartar meus objetos quando a solicitação HTTP termina. Agora acho que tenho um problema maior, porque há evidências de que ele está servindo o mesmo pedido de solicitação de objeto. Novamente, estou usando suas instruções aqui. Meu teste é um pouco mais complexo, porque estou usando a sintaxe delegada para criar um objeto, mas acho que estou sinalizando-o para o pedido de solicitação. 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;

Minha intenção aqui é registrar o IDBConnectionSelector para criar o tipo de concreto CachingDBConnections com um construtor personalizado, mas com o escopo da solicitação HTTP.

Alguns métodos do objeto CachingDBConnections estão falhando nas solicitações subsequentes de uma maneira que me leva a acreditar que estou recebendo o mesmo que recebi da última vez e não uma nova para cada solicitação.

Isso faz sentido? O que estou fazendo errado?

Foi útil?

Solução 2

Eu descobri!

Eu estava pedindo ao contêiner errado a instância do objeto-eu estava pedindo ao Application-container o objeto e não o contador-contador.

D'HO!

Outras dicas

Na maioria das vezes, isso acontece (em qualquer contêiner do COI), você descobrirá que um componente ao longo de uma cadeia de dependências é um singleton.

Por exemplo

A -> B -> C

Se A for 'Factory', B é 'Singleton' e C é 'Factory', então resolver um receberá uma referência ao Singleton B, que sempre fará referência ao mesmo C.

Para que um novo C seja criado toda vez que você resolver A, B também deve ser 'fábrica'.

Como está meu palpite? Este é o problema?

usuario

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top