コード例 #1
0
 /// <summary>
 ///     Конструктор класса.
 /// </summary>
 /// <param name="rowChecker">Логика анализа данных файлов по индексу.</param>
 /// <param name="fileDataCache">Интерфейс, предоставляющий данные из файлов.</param>
 /// <param name="filesInformationByIndexCacheFactory">Фабрика для IFilesInformationByIndexCache.</param>
 /// <param name="filesForIndexCacheFactory">Фабрика для IFilesForIndexCache.</param>
 public IndexedCache(
     IRowChecker rowChecker,
     IFileDataCache fileDataCache,
     IFilesInformationByIndexCacheFactory filesInformationByIndexCacheFactory,
     IFilesForIndexCacheFactory filesForIndexCacheFactory)
 {
     this.rowChecker = rowChecker;
     this.fileDataCache = fileDataCache;
     this.filesInformationByIndexCacheFactory = filesInformationByIndexCacheFactory;
     this.filesForIndexCacheFactory = filesForIndexCacheFactory;
     this.filesInfoByIndexes = new ConcurrentDictionary<Index, IFilesInformationByIndexCache>();
     this.filesForByIndexes = new ConcurrentDictionary<Index, IFilesForIndexCache>();
 }
コード例 #2
0
        /// <summary>
        ///     Вернуть экземпляр сервиса.
        /// </summary>
        /// <param name="indexChecker">Валидатор индекса под логику поиска слова в файле.</param>
        /// <param name="rowChecker">Логика анализа данных файлов по индексу.</param>
        /// <exception cref="ArgumentException">
        ///     Если неправильно поданы параметры.
        ///     Либо оба null, либо оба не null
        /// </exception>
        /// <returns>Экземпляр сервиса.</returns>
        public IIndexingService GetIndexingService(
            IIndexChecker indexChecker = null,
            IRowChecker rowChecker = null)
        {
            if (this.indexingService == null)
            {
                lock (syncObject)
                {
                    if (this.indexingService == null)
                    {
                        this.indexingService = this.BuildIndexingService(indexChecker, rowChecker);
                    }
                }
            }

            return this.indexingService;
        }
コード例 #3
0
        /// <summary>
        ///     Построить сервис.
        /// </summary>
        /// <param name="indexChecker">Валидатор индекса под логику поиска слова в файле.</param>
        /// <param name="rowChecker">Логика анализа данных файлов по индексу.</param>
        /// <returns>Экземпляр сервиса.</returns>
        private IIndexingService BuildIndexingService(IIndexChecker indexChecker, IRowChecker rowChecker)
        {
            if ((indexChecker != null) && (rowChecker == null) ||
                (indexChecker == null) && (rowChecker != null))
            {
                throw new ArgumentException("Both checkers should be setted or both should be null");
            }

            if (indexChecker == null)
            {
                indexChecker = new SingleWordIndexChecker();
                rowChecker = new SingleWordRowChecker();
            }

            var sourceValidator = new SimpleSourceValidator();
            var sourceStorage = new SafetySourceStorage(new SourceStorage());
            var fileInformationExtractor = new FileInformationExtractor();

            var fileInternalDataExtractor = new FileInternalDataExtractor();
            var fileDataCache = new SafetyFileDataCache(
                new FileDataCache(fileInternalDataExtractor));

            var filesInformationByIndexCacheFactory = new FilesInformationByIndexCacheFactory();
            var filesForIndexCacheFactory = new FilesForIndexCacheFactory();
            var indexedCache = new SafetyIndexedCache(new IndexedCache(
                rowChecker,
                fileDataCache,
                filesInformationByIndexCacheFactory,
                filesForIndexCacheFactory));

            var fileSearcher = new FileSearcher();

            return new SimpleIndexingService(
                sourceValidator,
                sourceStorage,
                indexChecker,
                fileInformationExtractor,
                indexedCache,
                fileSearcher);
        }