public MainViewModel Build()
        {
            ConnectionService = _connectionService ?? Substitute.For <IConnectionService>();
            var orderManager            = Substitute.For <IOrderManager>();
            var orderCalculationService = _orderCalculationService ?? Substitute.For <IOrderCalculationService>();

            var marketDataManager = Substitute.For <IMarketDataManager>();
            var positionsManager  = Substitute.For <IPositionManager>();
            var contractManager   = Substitute.For <IContractManager>();

            var queueProcessor = Substitute.For <IQueueProcessor>();

            queueProcessor
            .When(x => x.Enqueue(Arg.Any <Action>()))
            .Do(x => x.Arg <Action>().Invoke());

            var dispatcherHelper = Substitute.For <IDispatcherHelper>();

            dispatcherHelper
            .When(x => x.InvokeOnUiThread(Arg.Any <Action>()))
            .Do(x => x.Arg <Action>().Invoke());

            var accountManager = _accountManager ?? Substitute.For <IAccountManager>();

            var tradeRecordingService = _tradeRecordingService ?? Substitute.For <ITradeRecordingService>();

            var positionsViewModel = new PositionsViewModel(dispatcherHelper, marketDataManager, accountManager, positionsManager, contractManager, queueProcessor, tradeRecordingService);

            SettingsRepository = _settingsRepository;
            if (SettingsRepository == null)
            {
                SettingsRepository = Substitute.For <ISettingsRepository>();
                SettingsRepository.GetAllAsync().Returns(new List <Setting>
                {
                    new Setting
                    {
                        Key   = SettingsViewModel.SettingsKeys.RiskPercentOfAccountSize,
                        Value = "1"
                    },
                    new Setting
                    {
                        Key   = SettingsViewModel.SettingsKeys.RiskMultiplier,
                        Value = "1"
                    }
                });
            }

            SettingsViewModel = new SettingsViewModel(SettingsRepository);

            var findSymbolService      = Substitute.For <IFindSymbolService>();
            var factory                = new NewOrderViewModelFactory(dispatcherHelper, queueProcessor, findSymbolService, orderCalculationService, orderManager);
            var tradeRepository        = Substitute.For <ITradeRepository>();
            var riskCalculationService = _riskCalculationService ?? Substitute.For <IRiskCalculationService>();

            MainViewModel.IsUnitTesting = true;
            return(new MainViewModel(
                       dispatcherHelper,
                       ConnectionService,
                       orderCalculationService,
                       positionsViewModel,
                       SettingsViewModel,
                       new OrdersListViewModel(dispatcherHelper, queueProcessor, factory, tradeRepository, marketDataManager),
                       riskCalculationService,
                       tradeRecordingService));
        }