IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

Petite Question sur le lazy loading


Sujet :

ASP.NET

  1. #1
    Membre expérimenté Avatar de Arthis
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 265
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Italie

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 265
    Points : 1 352
    Points
    1 352
    Par défaut Petite Question sur le lazy loading
    Bonjour,

    j 'ai une petite Question sur le lazy loading. Il y a un comportement de l'application que je ne comprends pas. J'utilise asp.net 3.5 et visual studio 2008.

    Voila j'ai le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    private IList<ProjectProvider> _Projects;
    private ICatalogRepository _CatalogRepository;
     
     public IList<ProjectProvider> Projects 
            {
                get
                {
                    if (_Projects == null && _CatalogRepository!=null)
                    {
                        _Projects = new LazyList<ProjectProvider>();
                        LoadProjects();
                    }
                    return _Projects;
                }
                set
                {
                    _Projects = value;
                }
            }
     
     
            public void LoadProjects()
            {
                if (_CatalogRepository != null)
                    _Projects = _CatalogRepository.GetProjects().ToList();
                else
                    throw new Exception("No Catalog Repository found.");
            }
     
            public void SetRepository(ICatalogRepository userrepository)
            {
                _CatalogRepository = userrepository;
            }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     MonObjet _MonObjet = new MonObjet();
     MonObjet.SetRepository(RepositoryCatalog);
    Lorsque je cree mon objet la liste de mes projets est bien null. Tant la variable privee que la variable publique mais dés que je met quelque chose dans _catalogrepository, ma variable projet se trouve instanciée sans que je lui ai dit quoi que ce soit.

    Est ce normal Docteur?

  2. #2
    Membre expérimenté Avatar de Arthis
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 265
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Italie

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 265
    Points : 1 352
    Points
    1 352
    Par défaut
    ok j' ai trouvé la solution. Je delegue la creation de ma liste de projet à une factory qui se charge du travail. Ainsi ma variable Liste de projets rete bien à null tant que je n'en fais pas un appel explicite. Voici le code au cas où cela interesse quelqu'un :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     private IList<ProjectProvider> _Projects;
     private ICatalogRepository _CatalogRepository;
     
     public IList<ProjectProvider> Projects 
            {
                get
                {
                    if (_Projects == null)
                    {
                        ProjectFactory.GetInstances(_CatalogRepository, ProjectFactory.E_ProjectType.ZProject);
                    }
                    return _Projects;
                }
                set
                {
                    _Projects = value;
                }
            }
     
    public void DisposeRepository()
            {
                _CatalogRepository = null;
            }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     public sealed class ProjectFactory
        {
     public static IList<ProjectProvider> GetInstances( ICatalogRepository RepositoryCatalog, E_ProjectType Projecttype)
            {
                IList<ProjectProvider> Instances = new List<ProjectProvider>();
                switch (Projecttype)
                {
                    case E_ProjectType.CustomProject:
                        Instances = RepositoryCatalog.GetProjects().ToList();
                        break;
                    case E_ProjectType.ZProject:
                        Instances = RepositoryCatalog.GetProjects().ToList();
                        break;
                }
                return Instances;
            }
    }

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public interface ICatalogRepository
        {
            IQueryable<ProjectProvider> GetProjects();
            IQueryable<CategoryProvider> GetCategories(long projectid);
     
        }

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    MonObjet _MonObjet  = new MonObjet ();
    _MonObjet  .SetRepository(RepositoryCatalog);
    et la recupération des projet s se fait à ce moment là , uniquement quand je fais une référence a Projects :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
                foreach (ProjectProvider p in _MonObjet .Projects)
                {
                    Response.Write(p.Name);
                }

    Merci en tout cas de votre lecture


    L'appel à la base

  3. #3
    Membre expérimenté Avatar de Arthis
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 265
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Italie

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 265
    Points : 1 352
    Points
    1 352
    Par défaut
    Bon je me suis emballé trop vite même comme ca , je me retrouve avec le probleme... Ma variable project est instanciée sans que je lui demande..

Discussions similaires

  1. Petite question sur le LAZY LOADING
    Par saveriu dans le forum JPA
    Réponses: 11
    Dernier message: 16/03/2010, 11h41
  2. [Visuel XP] Petite question sur le theme XP...
    Par ZoumZoumMan dans le forum C++Builder
    Réponses: 12
    Dernier message: 20/01/2005, 14h41
  3. petite question sur le composant IBX ...
    Par vbcasimir dans le forum Bases de données
    Réponses: 4
    Dernier message: 05/01/2005, 10h33
  4. Réponses: 3
    Dernier message: 08/12/2004, 13h58
  5. Petite question sur les performances de Postgres ...
    Par cb44 dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 13/01/2004, 13h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo