public HighlyRatedSongsAdviser(IAdviseRankCalculator adviseRankCalculator, IClock dateTimeFacade, IOptions <HighlyRatedSongsAdviserSettings> options)
        {
            this.adviseRankCalculator = adviseRankCalculator ?? throw new ArgumentNullException(nameof(adviseRankCalculator));
            this.dateTimeFacade       = dateTimeFacade ?? throw new ArgumentNullException(nameof(dateTimeFacade));
            this.settings             = options?.Value ?? throw new ArgumentNullException(nameof(options));

            if (settings.OneAdviseSongsNumber <= 0)
            {
                throw new InvalidOperationException($"{nameof(settings.OneAdviseSongsNumber)} is not set for highly rated songs adviser");
            }

            maxTermsForRatings = settings.MaxTerms
                                 .ToDictionary(t => t.Rating, t => TimeSpan.FromDays(t.Days));
        }
 public RankBasedAdviseContentSorter(IAdviseRankCalculator adviseRankCalculator)
 {
     this.adviseRankCalculator = adviseRankCalculator ?? throw new ArgumentNullException(nameof(adviseRankCalculator));
 }