static void Main(string[] args) { DbContextOptionsBuilder dbContextOptionsBuilder = new DbContextOptionsBuilder(); var connection = dbContextOptionsBuilder .UseSqlServer("Server=(localdb)\\MSSQLLocalDB;Database=SpaceWeb;Trusted_Connection=True"); SpaceDbContext spaceDbContext = new SpaceDbContext(connection.Options); ExchangeRateToUsdCurrentRepository exchangeRateToUsdCurrentRepository = new ExchangeRateToUsdCurrentRepository(spaceDbContext); ExchangeAccountHistoryRepository exchangeAccountHistoryRepository = new ExchangeAccountHistoryRepository(spaceDbContext); ExchangeRateToUsdHistoryRepository exchangeRateToUsdHistoryRepository = new ExchangeRateToUsdHistoryRepository(spaceDbContext); var configExpression = new MapperConfigurationExpression(); var mapperConfiguration = new MapperConfiguration(configExpression); var mapper = new Mapper(mapperConfiguration); var contextAccessor = new HttpContextAccessor(); TransactionBankRepository transactionBankRepository = new TransactionBankRepository(spaceDbContext); var bankAccountRepository = new BankAccountRepository(spaceDbContext, mapper, contextAccessor, transactionBankRepository); var userRepository = new UserRepository(spaceDbContext, bankAccountRepository); IUserService userService = new UserService(userRepository, contextAccessor); var currencyService = new CurrencyService(userService, exchangeRateToUsdCurrentRepository, exchangeAccountHistoryRepository, exchangeRateToUsdHistoryRepository, mapper); var currentDate = DateTime.Now; while (true) { if ((currentDate.Minute % 3) == 0) { currencyService.MoveCurrentExchangesDbToHistoryDb(exchangeRateToUsdCurrentRepository, exchangeRateToUsdHistoryRepository, mapper); currencyService.DeleteCurrentExchRatesFromDb(exchangeRateToUsdCurrentRepository); currencyService.PutCurrentExchangeRatesToDb( exchangeRateToUsdCurrentRepository, currencyService.GetExchangeRates()); Console.Write($"Current exchanges update for History DB at {currentDate}"); Thread.Sleep(3 * 59 * 1000); // 59 - because updating exchanges takes ~ 1 second and timer gets a displacement. } currentDate = DateTime.Now; currentDate = currentDate.AddSeconds(-currentDate.Second); } }