2017-07-12 2 views
0

J'ai une méthode sur le fond. Je veux invoquer cette méthode plusieurs fois mais en plus je veux invoquer Session.Prefetch<OpParamDef>() juste une fois. Qu'est-ce que je dois faire? Y a-t-il une commande spéciale pour cela? Je veux appeler Prefetch juste pour la première fois.Une préextraction dans la méthode

public void method 
{ 
    get 
    { 
     Session.Prefetch<OpParamDef>();    
     var result = new List<OpParamDef>(); 
    } 
} 
+0

Ce n'est pas une méthode - c'est une déclaration de propriété, sauf qu'elle est invalide. Fournir un code invalide comme celui-ci rend très difficile de vous aider. Quand vous dites "juste une fois", voulez-vous dire "juste une fois dans la vie entière de l'application" ou "juste une fois pour l'instance" ou autre chose? Précisez s'il vous plaît. –

+0

Juste une fois dans la vie entière de l'application parce que je fais des appels d'optimisation et de prélecture à chaque fois. –

+1

Dans ce cas, un constructeur statique serait probablement suffisant. –

Répondre

1

Vous pouvez envisager d'utiliser Lazy<T> pour stocker une collection chargée paresseux. La documentation est here

Un exemple d'utilisation en fonction de votre question pourrait être:

Lazy<List<OpParamDef>> Collection { get; set; } 
//...in your ctor 
Collection = new Lazy<List<OpParamDef>>(() => Session.Prefetch<OpParamDef>()); 

Vous pouvez accéder Collection.Value plusieurs fois, mais Session.Prefetch<OpParamDef>() ne seront utilisées que sur le premier appel, le résultat de cette initialiseur est alors mis en cache.

Vous pouvez même cacher l'accesseur Value derrière une propriété:

public List<OpParamDef> CollectionAsList 
{ 
    get 
    { 
     return Collection.Value; 
    } 
} 

Ceci a l'avantage de ne pas charger la fonction d'initialisation du tout si la valeur est utilisée. En plus de cela, vous pouvez utiliser cette approche de manière flexible dans n'importe quel contexte. (Niveau d'application, contexte de demande, etc.)

+0

C'est une bonne idée? [Pastebin] https://pastebin.com/eTUm8b8y –

+0

@ RobertDaraż il semble que vous répliquer la fonctionnalité de 'Lazy '. Je voudrais étudier comment la solution ci-dessus (en utilisant «Lazy ») fonctionne et envisager d'utiliser cela. – Oliver