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.)
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. –
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. –
Dans ce cas, un constructeur statique serait probablement suffisant. –