/// <summary> /// /// </summary> /// <param name="mode">режим работы</param> /// <param name="pollPeriod">интервал опроса бд</param> /// <param name="invalidator">объект, инвалидирующий кеш</param> /// <param name="connectionName">имя строки подключения</param> /// <param name="dueTime">отложенный запуск (ms)</param> /// <param name="onInvalidate">вызывается при удалении старых записей</param> public QPCacheItemWatcher(InvalidationMode mode, TimeSpan pollPeriod, IContentInvalidator invalidator, string connectionName = "qp_database", int dueTime = 0, bool useTimer = true, Func <Tuple <int[], string[]>, bool> onInvalidate = null) { Throws.IfArgumentNull(_ => connectionName); Throws.IfArgumentNull(_ => invalidator); _dueTime = TimeSpan.FromMilliseconds(dueTime); _pollPeriod = pollPeriod; if (useTimer) { _timer = new Timer(OnTick, null, 0, Timeout.Infinite); } var connectionString = ConfigurationManager.ConnectionStrings[connectionName]; try { _connectionString = connectionString.ConnectionString; } catch (Exception ex) { throw new InvalidOperationException("access to _connectionString.ConnectionString caused an exception", ex); } Throws.IfArgumentNullOrEmpty(_connectionString, nameof(_connectionString)); _trackers = new ConcurrentBag <CacheItemTracker>(); _mode = mode; _invalidator = invalidator; _onInvalidate = onInvalidate; Throws.IfArgumentNull(_ => _connectionString); }