Je veux juste m'assurer que je ne suppose pas quelque chose de stupide ici, lors de la mise en œuvre du motif singleton dans une application Web ASP .NET, la portée de la variable statique n'est que pour la session d'utilisateur actuelle, non? Si un deuxième utilisateur accède au site, il s'agit d'une option de mémoire différente ...?
La portée de la variable statique est destinée à l'ensemble du domaine de l'application, ce qui signifie que d'autres sessions y ont également accès. Ce n'est que si vous avez une ferme avec différents serveurs, vous auriez plus d'une instance de la variable.
Les membres statiques ont une portée du processus de travail actuel uniquement, il n'a donc rien à voir avec les utilisateurs, car d'autres demandes ne sont pas nécessairement traitées par le même processus de travail.
Au fait, le nombre de processus de travail par défaut est de 1, c'est pourquoi le Web est plein de personnes qui pensent que les membres statiques ont une portée de l'application complète.
Comme d'autres l'ont mentionné, une variable statique est global à l'application complète, pas des demandes simples.
Pour faire un singleton global pour seulement des demandes individuelles, vous pouvez utiliser le HttpContext.Current.Items
dictionnaire.
public class Singleton
{
private Singleton() { }
public static Singleton Instance
{
get
{
if (HttpContext.Current.Items["yourKey"] == null)
HttpContext.Current.Items["yourKey"] = new Singleton();
return (Singleton)HttpContext.Current.Items["yourKey"];
}
}
}
Si vous en avez besoin pour être utilisateur ou session basé, consultez le lien suivant. Sinon, comme l'a dit Otavio, le singleton est disponible pour l'ensemble du domaine.
Le singleton est utilisé pour l'ensemble du domaine de l'application, si vous souhaitez stocker des données associées à la session utilisateur, utilisez la session httpcontext conçue à cette fin. Bien sûr, vous devez probablement redéfinir votre structure de classe pour pouvoir proposer un moyen de faire face à une paire de paires de clés de traiter avec les données que vous essayez de travailler.