public CurrentMonthBurnDownGraphsController(
            [NotNull] Func<BucketBurnDownController> bucketSpendingFactory,
            [NotNull] AddUserDefinedBurnDownController addUserDefinedBurnDownController,
            [NotNull] IBudgetBucketRepository budgetBucketRepository,
            [NotNull] UiContext uiContext)
        {
            if (bucketSpendingFactory == null)
            {
                throw new ArgumentNullException("bucketSpendingFactory");
            }

            if (addUserDefinedBurnDownController == null)
            {
                throw new ArgumentNullException("addUserDefinedBurnDownController");
            }

            if (budgetBucketRepository == null)
            {
                throw new ArgumentNullException("budgetBucketRepository");
            }

            if (uiContext == null)
            {
                throw new ArgumentNullException("uiContext");
            }

            this.bucketSpendingFactory = bucketSpendingFactory;
            this.addUserDefinedBurnDownController = addUserDefinedBurnDownController;
            this.chartBuilder = new BurnDownChartsBuilder(budgetBucketRepository, this.bucketSpendingFactory);

            MessengerInstance = uiContext.Messenger;
            MessengerInstance.Register<ApplicationStateRequestedMessage>(this, OnApplicationStateRequested);
            MessengerInstance.Register<ApplicationStateLoadedMessage>(this, OnApplicationStateLoaded);
        }
        public BurnDownChartsService([NotNull] IBudgetBucketRepository bucketRepository,
                                     [NotNull] BurnDownChartsBuilder chartsBuilder,
                                     [NotNull] IBurnDownChartAnalyser chartAnalyser)
        {
            if (bucketRepository == null)
            {
                throw new ArgumentNullException(nameof(bucketRepository));
            }

            if (chartsBuilder == null)
            {
                throw new ArgumentNullException(nameof(chartsBuilder));
            }

            if (chartAnalyser == null)
            {
                throw new ArgumentNullException(nameof(chartAnalyser));
            }

            this.bucketRepository = bucketRepository;
            this.chartsBuilder    = chartsBuilder;
            this.chartAnalyser    = chartAnalyser;
        }