2011-08-25 3 views
2

J'ai une classe qui détient des licences valides pour un utilisateur et toutes les 15 minutes, elle est "validée" pour s'assurer que les licences actuelles sont valides et pour ajouter/supprimer celles qui ont changé.Utilisation du stockage de cache dans MVC2

Actuellement, il est accessible dans mon ApplicationController, dont tous les autres contrôleurs de l'application héritent, de sorte que chaque fois que l'utilisateur effectue des opérations, il s'assure qu'ils ont les licences/autorisations valides pour le faire.

Modèle de licence:

public class LicenseModel 
{ 
    public DateTime LastValidated { get; set; } 
    public List<License> ValidLicenses { get; set; } 
    public bool NeedsValidation 
    { 
     get{ return ((DateTime.Now - this.LastValidated).Minutes >= 15);} 
    } 

    //Constructor etc... 
} 

processus de validation:(se produit dans le procédé de l'ApplicationController Initialize())

LicenseModel licenseInformation = new LicenseModel();  
if (Session["License"] != null) 
{ 
    licenseInformation = Session["License"] as LicenseModel; 
    if (licenseInformation.NeedsValidation) 
     licenseInformation.ValidLicenses = Service.GetLicenses(); 
     licenseInformation.LastValidated = DateTime.Now; 
     Session["License"] = licenseInformation; 
} 
else 
{ 
    licenseInformation = new LicenseModel(Service.GetLicenses()); 
    Session["License"] = licenseInformation; 
} 

Résumé:

Comme vous pouvez le voir, ce processus utilise actuellement la Session pour stocker le LicenseModel, mais je me demandais s'il serait plus facile/plus efficace d'utiliser le Cache pour stocker ceci. (ou peut-être le OutputCache?) et comment je pourrais l'implémenter.

Répondre

1

Le cache aurait définitivement plus de sens si les licences sont utilisées à l'échelle de l'application et ne sont spécifiques à aucune session utilisateur. Le cache peut gérer l'expiration de 15 minutes pour vous et vous n'aurez plus besoin des propriétés NeedsValidation ou LastValidated de votre classe LicenseModel. Vous pourriez probablement faire disparaître le modèle tous ensemble et juste stocker la liste des licences valides comme suit:

if (HttpContext.Cache["License"] == null) 
{ 
    HttpContext.Cache.Insert("License",Service.GetLicenses(), null, 
    DateTime.Now.AddMinutes(15), Cache.NoSlidingExpiration); 
} 

var licenses = HttpContext.Cache["License"] as List<License>; 
Questions connexes