public CanalService(ILogger <CanalService> logger, IOptions <CanalOption> canalOption, IServiceScopeFactory scopeFactory, IConfiguration configuration, CanalConsumeRegister register) { _logger = logger; _registerTypeList = new List <System.Type>(); if (register.SingletonConsumeList != null && register.SingletonConsumeList.Any()) { _registerTypeList.AddRange(register.SingletonConsumeList); } if (register.ConsumeList != null && register.ConsumeList.Any()) { _registerTypeList.AddRange(register.ConsumeList); } _configuration = configuration; _canalOption = canalOption?.Value; if (_canalOption == null) { _canalOption = new CanalOption(); } UpdateFromEnv(_canalOption); if (string.IsNullOrEmpty(_canalOption.Host) || string.IsNullOrEmpty(_canalOption.Destination) || string.IsNullOrEmpty(_canalOption.MysqlName) || string.IsNullOrEmpty(_canalOption.MysqlPwd) || _canalOption.Port < 1 || _canalOption.Timer < 1 || _canalOption.GetCountsPerTimes < 1) { throw new ArgumentNullException("Canal param in appsettings.json is not correct!"); } if (string.IsNullOrEmpty(_canalOption.Subscribe)) { _canalOption.Subscribe = ".*\\..*"; } _scope = scopeFactory.CreateScope(); }
private void UpdateFromEnv(CanalOption _can) { var host = _configuration["canal.host"]; if (!string.IsNullOrEmpty(host)) { _can.Host = host; } var port = _configuration["canal.port"]; if (!string.IsNullOrEmpty(port)) { _can.Port = int.Parse(port); } var destinations = _configuration["canal.destinations"]; if (!string.IsNullOrEmpty(destinations)) { _can.Destination = destinations; } var subcribe = _configuration["canal.subscribe"]; if (!string.IsNullOrEmpty(subcribe)) { _can.Subscribe = subcribe; } var dbUsername = _configuration["canal.dbUsername"]; if (!string.IsNullOrEmpty(dbUsername)) { _can.MysqlName = dbUsername; } var dbPassword = _configuration["canal.dbPassword"]; if (!string.IsNullOrEmpty(dbPassword)) { _can.MysqlPwd = dbPassword; } var timer = _configuration["canal.timer"]; if (!string.IsNullOrEmpty(timer)) { _can.Timer = int.Parse(timer); } var getCountsPerTimes = _configuration["canal.getCountsPerTimes"]; if (!string.IsNullOrEmpty(getCountsPerTimes)) { _can.GetCountsPerTimes = int.Parse(getCountsPerTimes); } }