protected virtual async Task <List <ModuleGroupDto> > GetModuleGroupList(ModuleLibrarySourceDto source)
        {
            var item = await _cache.GetOrAddAsync(source.Name,
                                                  async() => new ModuleGroupsCacheItem
            {
                ModuleGroupList = await RequestModuleGroupListFromSourceAsync(source)
            },
                                                  () => new DistributedCacheEntryOptions
                                                  { AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(CacheExpirationMinutes) });

            return(item.ModuleGroupList);
        }
        protected virtual async Task <List <ModuleGroupDto> > RequestModuleGroupListFromSourceAsync(ModuleLibrarySourceDto source)
        {
            var client = _httpClientFactory.CreateClient();

            var str = await client.GetStringAsync(source.IndexUrl);

            return(_jsonSerializer.Deserialize <ModuleLibraryIndexDto>(str).Groups);
        }