コード例 #1
0
        /// <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);
        }