public static ISearchContext SearchContext(this HttpContextBase context, Item dataSource)
        {
            return(context.CreatePerRequest(CacheKey, () =>
            {
                // only instantiate one searchContext per request
                var mapper = ServiceLocator.ServiceProvider.GetService <IItemMapper>();
                var sortOptionRepository = ServiceLocator.ServiceProvider.GetService <ISortOptionRepository>();
                var settings = mapper.Map <CollectionSettings>(dataSource);

                // set non-mapped fields
                settings.CollectionFacets = dataSource.GetListFieldValueItems(DSP.Foundation.SitecoreTemplates.Has_Collection_Facets.CollectionFacets.FieldName).ToList();
                settings.CollectionSource = dataSource.GetFieldValueAsItem(DSP.Foundation.SitecoreTemplates.Collection_Source.CollectionSource.FieldName);

                var facetValueValidator = ServiceLocator.ServiceProvider.GetService <FacetValueValidator>();

                return new HttpRequestSearchContext(context.Request, facetValueValidator, settings, sortOptionRepository);
            }));
        }