Generelt i en webapp vil du have, at staten skal være anmodningsomfang så meget som muligt.
Kun i tilfælde af optimeringer på meget lavt niveau er det sandsynligt, at du nogensinde vil løbe ind i et tilfælde, hvor det er passende at skabe singleton-objekter (og chancerne er selv da, at du trækker en sådan caching-/delingslogik ud i en anden klasse, som bliver trukket ind som en afhængighed af dine andre [request scope] objekter og gør det singleton scope). Husk, at en singleton i forbindelse med en webapp betyder flere tråde, der bruger de samme objekter. Dette er sjældent gode nyheder.
På samme grundlag er transient scope den mest ligetil standard (og det er derfor, Ninject 2 gør det sådan) - request scope bør kun indgå i ligningen, når noget skal deles af præstationsmæssige årsager osv. (eller fordi det simpelthen er konteksten af delingen [som nævnt i det andet svar]).