Pergunta

Eu tenho um webapp que armazena um objeto config na ApplicationState. Este objeto contém a string de conexão ao banco de dados, entre outras coisas.

Às vezes eu iniciar uma discussão assíncrona para fazer um tarefas alguns já em execução, como o envio de e-mails e atualizar o banco de dados.

Entretanto, desde que esta discussão não tem um HttpContext eu não posso chegar para o objeto de configuração.

Eu sei que este design que tudo depende HttpContext é ruim, mas isso é tarde demais para mudar agora. Olhando para refletor eu vejo que a classe HttpContext apenas usa uma classe interna estática para obter o ApplicationState. Existe alguma outra forma de obter para ele?

Todas essas classes internas em .net são realmente irritante.

Foi útil?

Solução

Basta passar o que quiser para o seu segmento quando você iniciá-lo. Use um ParameterizedThreadStart delegado para iniciá-lo em vez de apenas um ThreadStart delegar. Você poderia passá-lo HttpContext.Current, ou então pacote em conjunto as informações que deseja seu segmento de ter, e passá-lo.

Outras dicas

Se você realmente Acesso à necessidade de Estado Aplicação (ou similar) de manipuladores assíncronos você deve modificar sua subclasse HttpApplication (por exemplo Global.asax) para armazenar a instância Estado Aplicação (this.Application) para uma propriedade estática durante Application_Start:

public static HttpApplicationStateWrapper State { get; private set; }

protected void Application_Start()
{
    State = new HttpApplicationStateWrapper(this.Application);
}

Seria mais apropriado usar um quadro DI para registrar este exemplo, mas se você tiver um disponível, você provavelmente poderia evitar o uso de Estado Aplicação totalmente para o armazenamento de configuração. Além disso, há uma estrutura de configuração em .NET que aborda diretamente essa necessidade e fornece a capacidade de ler a configuração de qualquer lugar.

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