Je veux juste m'assurer que je ne suppose pas quelque chose d'idiot ici, lors de l'implémentation du modèle singleton dans une application Web ASP .Net, la portée de variable statique est seulement pour la session utilisateur actuelle, non? Si un deuxième utilisateur accède au site, la portée de la mémoire est-elle différente?ASP .NET Singleton
Répondre
La portée de la variable statique s'applique à l'ensemble du domaine de l'application, ce qui signifie que les autres sessions y ont également accès. Seulement si vous avez une ferme avec des serveurs différents, vous aurez plus d'une instance de la variable.
+1 "Seulement si vous avez une ferme avec différents serveurs vous auriez plus d'une instance de la variable ". –
Si vous avez besoin d'un utilisateur ou d'une session, consultez le lien suivant. Sinon, comme l'a dit Otavio, le singleton est disponible pour l'ensemble du domaine.
Votre lien semble être mort –
@Michael Lang: Oui, il semble que sam a changé son moteur de contenu. Mise à jour du lien avec la nouvelle référence – NotMe
Le singleton est utilisé pour l'ensemble du domaine d'application, si vous voulez stocker les données relatives session utilisateur, utilisez Session HttpContext qui est conçue à cette fin. Bien sûr, vous devrez probablement revoir la structure de votre classe afin de trouver une façon de traiter les données avec lesquelles vous travaillez.
Comme d'autres l'ont mentionné, une variable statique est global to the entire application, not single requests.
Pour faire une demande mondiale singleton à seulement individuelles, vous pouvez utiliser le dictionnaire HttpContext.Current.Items
.
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"];
}
}
}
Merci, Quel est le frais généraux de cela? cela sera-t-il beaucoup plus lent si j'accède au singleton assez souvent? – Wesly
@Ws Vous ne devriez pas remarquer de problèmes de performance avec cette approche. L'implémentation du dictionnaire est très efficace, donc elle ne ralentira pas votre application, même si vous y accédez beaucoup. –
pourquoi devrions-nous utiliser "HttpContext.Current.Items" au lieu de "Session"? – Seva
membres statiques ont une portée du processus de travail en cours seulement, donc il n'a rien à voir avec les utilisateurs, parce que d'autres demandes ne sont pas nécessairement traitées par le même processus de travail. Pour partager des données avec un utilisateur spécifique et entre requêtes, utilisez HttpContext.Current.Session.
Session pour l'application entière par utilisateur. ViewState pour une seule page asp.
- 1. intégration ASP .NET 2.0 avec ASP .NET MVC 2.0
- 2. ASP .NET - Utilisation asp: ListBox dans ListView
- 3. ASP .NET - Utiliser asp: CheckBox dans ListView
- 4. ASP .NET et IIS
- 5. .NET & ASP vs PHP
- 6. ASP .NET HTML.DropDownListFor
- 7. Sécurité dans asp .net
- 8. ASP .NET ou Django?
- 9. configuration ASP .NET ProcessModel
- 10. asp .net jquery
- 11. ASP .Net: problème d'autorisation
- 12. .Net, asp Global.asa équivalent
- 13. Asp .Net File Caching
- 14. ASP .Net et SessionState
- 15. ASP .NET VirtualPathProvider HttpCompileException
- 16. Nhibernate mappage dans asp .net
- 17. ASP .NET confusion - contrôles serveur
- 18. ASP .NET AJAX et JQuery
- 19. asp .net MVC 2.0 Validation
- 20. ASP .NET DynamicData Fournisseur personnalisé
- 21. Webservices dans ASP .NET MVC2
- 22. ASP .net emplacement physique actuel
- 23. Contrôle Treeview dans ASP .net
- 24. Transaction pour l'adhésion ASP .net
- 25. Contrôle TreeView dans ASP .NET
- 26. Databound DIV dans asp .net
- 27. Envoi email en asp .net
- 28. singleton
- 29. asp net jquery boîte de dialogue popup dans asp: formview
- 30. ASP .NET - Configurer SQLDataSource utiliser MySQL .NET Connector
La réponse courte est non, vous avez tort. –
Dupliquer: http://stackoverflow.com/questions/194999/are-static-class-instances-unique-to-a-request-or-a-server-in-asp-net –