/// <inheritdoc />
        public IEnumerable<TreeNode<IProductCollection>> GetRootTrees()
        {
            var cacheKey = GetCacheKey("GetRootTrees");
            var trees = (IEnumerable<TreeNode<IProductCollection>>)Cache.GetCacheItem(cacheKey);

            if (trees != null) return trees;

            var factory = new TreeNodeFactory<IProductCollection>();
            return (IEnumerable<TreeNode<IProductCollection>>)
                        Cache.GetCacheItem(cacheKey, () => factory.BuildTrees(GetAll()));
        }
        /// <inheritdoc />
        public IEnumerable <TreeNode <IProductCollection> > GetRootTrees()
        {
            var cacheKey = GetCacheKey("GetRootTrees");
            var trees    = (IEnumerable <TreeNode <IProductCollection> >)Cache.GetCacheItem(cacheKey);

            if (trees != null)
            {
                return(trees);
            }


            var factory = new TreeNodeFactory <IProductCollection>();

            return((IEnumerable <TreeNode <IProductCollection> >)
                   Cache.GetCacheItem(cacheKey, () => factory.BuildTrees(GetAll())));
        }