/// <summary> /// Конструктор класса. /// </summary> /// <param name="sourceValidator">Распознаватель источников по пути.</param> /// <param name="sourceStorage">Хранилище с источниками.</param> /// <param name="indexChecker">Валидатор индекса под логику анализа.</param> /// <param name="fileInformationExtractor">Вытаскиватель данных о файлах.</param> /// <param name="indexedCache">Кэш данных по индексам.</param> /// <param name="fileSearcher">Поисковик имен всех файлов в источников.</param> public SimpleIndexingService( ISourceValidator sourceValidator, ISourceStorage sourceStorage, IIndexChecker indexChecker, IFileInformationExtractor fileInformationExtractor, IIndexedCache indexedCache, IFileSearcher fileSearcher) { this.sourceValidator = sourceValidator; this.sourceStorage = sourceStorage; this.indexChecker = indexChecker; this.fileInformationExtractor = fileInformationExtractor; this.indexedCache = indexedCache; this.fileSearcher = fileSearcher; }
/// <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); }