2017-03-13 4 views
3

J'ai ce que je crois être une utilisation standard de IMemoryCache dans mon application ASP.NET Core.Pourquoi obtenir plusieurs instances de IMemoryCache dans ASP.Net Core?

En startup.cs je:

services.AddMemoryCache(); 

Dans mes contrôleurs je:

private IMemoryCache memoryCache; 
public RoleService(IMemoryCache memoryCache) 
{ 
    this.memoryCache = memoryCache; 
} 

Pourtant, quand je passe par debug, je me retrouve avec plusieurs caches de mémoire avec différents éléments de chaque un. Je pensais que le cache mémoire serait un singleton?

mis à jour avec exemple de code:

public List<FunctionRole> GetFunctionRoles() 
{ 
    var cacheKey = "RolesList"; 
    var functionRoles = this.memoryCache.Get(cacheKey) as List<FunctionRole>; 
    if (functionRoles == null) 
    { 
     functionRoles = this.functionRoleDAL.ListData(orgId); 
     this.memoryCache.Set(cacheKey, functionRoles, new MemoryCacheEntryOptions().SetAbsoluteExpiration(TimeSpan.FromDays(1))); 
    } 
} 

Si je lance deux clients dans deux navigateurs différents, quand je frappe la deuxième ligne, je peux voir this.memoryCache contient différentes entrées.

+0

comment l'avez-vous testé? pouvez-vous partager plus de code. – levent

+0

@levent question mise à jour –

Répondre

1

Je n'ai pas trouvé de raison à cela. Cependant, après avoir lu plus loin j'ai changé de IMemoryCache à IDistributedCache en utilisant le cache distribué en mémoire et le problème ne se produit plus. Je pensais que cette route me permettrait de facilement mettre à jour vers un serveur redis si j'avais besoin de plusieurs serveurs plus tard.