2009-03-23 3 views
1

J'ai une application Web qui stocke un objet de configuration dans ApplicationState. Cet objet contient entre autres la chaîne de connexion à la base de données.Obtenir ApplicationState dans asp.net sans HttpContext

Parfois, je démarre un thread asynchrone pour effectuer quelques tâches plus longues, comme l'envoi de courriels et la mise à jour de la base de données.

Cependant, comme ce thread n'a pas de HttpContext je ne peux pas obtenir à l'objet de configuration.

Je sais que cette conception que tout dépend de HttpContext est mauvaise, mais il est trop tard pour changer maintenant. En regardant le réflecteur je vois que la classe HttpContext utilise juste une classe interne statique pour obtenir l'ApplicationState. Y a-t-il un autre moyen d'y arriver?

Toutes ces classes internes dans .net sont vraiment ennuyantes.

Répondre

1

Il suffit de passer ce que vous aimez à votre fil lorsque vous le démarrez. Utilisez un délégué ParameterizedThreadStart pour le démarrer au lieu d'un délégué ThreadStart. Vous pouvez soit passer HttpContext.Current, ou bien regrouper les informations que vous voulez que votre thread ait, et le transmettre.

+0

Cela nécessite toujours l'accès à HttpContext à un moment donné. –

+0

Oui, au point où le fil est créé. –

0

Si vous vraiment besoin d'accéder à l'application État (ou similaire) de gestionnaires async vous devez modifier votre HttpApplication sous-classe (par exemple Global.asax) pour stocker l'instance d'application État (this.Application) à une propriété statique pendant Application_Start:

Il serait plus approprié d'utiliser une infrastructure DI pour enregistrer cette instance, mais si vous en avez une disponible, vous pouvez probablement éviter l'utilisation de l'état d'application pour stocker la configuration. En outre, il existe une structure de configuration dans .NET qui répond directement à ce besoin et offre la possibilité de lire la configuration de n'importe où.

Questions connexes