/// <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>(); }
/// <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; }
/// <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); }