Избегайте закрытия в ConcurentDictionary

#closures #concurrentdictionary

Вопрос:

У меня есть текущая функция

 public static ICacheManager GetCacheManager(string cacheManagerName, TimeSpan? expiration)  {  var cacheManager = CacheManagers.GetOrAdd(cacheManagerName, keyName =gt;  {  var ret = ServiceLocator.Current.GetInstancelt;ICacheManagergt;();  if (expiration.HasValue)  {  ret.Configure(keyName, expiration.Value);  }  else  {  ret.Configure(keyName);  }  return ret;  });   return cacheManager;  }  

Райдер JetBrains говорит, что есть

 Closure allocation: 'keyName' parameter   (outer closure of 'expiration' parameter)  

Ну, я знаю, что есть переопределение

 GetOrAddlt;TArggt;(TKey, Funclt;TKey,TArg,TValuegt;, TArg)  

но как им пользоваться?

Как переписать эту функцию, чтобы избежать закрытия и передать другие параметры в лямбда-функцию? Что делать, если мне нужно передать несколько параметров (запрос к БД и т.д.)