public MainWindow(SettingsViewModel settings)
        {
            if (settings == null)
                throw new ArgumentNullException("settings");
            
            this.settings = settings;

            this.tfsConnector = new TfsConnector(this.settings.TfsConnection);

            var cache = new MongoDbCache<ChangeInfo>(
                this.settings.MongoConnection,
                MongoDbCache.DatabaseName,
                "changeStats");

            this.analystics = new TfsAnalytics(this.tfsConnector, cache);

            this.imageService = new DirectoryUserImageService(this.settings.DomainController, this.settings.DirectoryImageProperty);

            this.DataContext = this;

            this.Projects = new ObservableCollection<TeamProject>(this.tfsConnector.GeTeamProjects());

            this.Changesets = new ObservableCollection<ChangesetViewModel>();
            this.Changes = new ObservableCollection<ChangeViewModel>();
            
            this.InitializeComponent();

            Observable.FromEvent<EventHandler, EventArgs>(
                handler => (sender, e) => handler(e),
                h => this.RedrawCharts += h,
                h => this.RedrawCharts -= h)
                .Throttle(TimeSpan.FromSeconds(3)).ObserveOn(Scheduler.CurrentThread).Subscribe(l =>
                {
                    this.Dispatcher.Invoke(this.DrawCharts);
                });
        }
 public TfsAnalytics(TfsConnector tfs, IPersistentCache<ChangeInfo> changesCache)
 {
     this.changesCache = changesCache;
     this.tfs = tfs;
 }