public TemplatesController(
     ILogger <TemplatesController> logger,
     ITemplateRepository templateRepository,
     IEtlParseService parseService
     )
 {
     _logger = logger;
     this.templateRepository = templateRepository;
     this.parseService       = parseService;
 }
        public XmlFileTemplateRepository(
            IEtlParseService etlParser,
            IDirectoryContents templateDirectoryContents,
            ILogger <XmlFileTemplateRepository> logger
            )
        {
            this.etlParser = etlParser;
            this.logger    = logger;

            var foundErrorsInXml = !InitTagData(templateDirectoryContents);

            foundErrorsInXml |= !GetTemplateDictionary(templateDirectoryContents, out var templatesMutableDictionary);

            var nrOfItemsBeforeCheckingEtl = templatesMutableDictionary.Count;

            templatesMutableDictionary = RemoveInvalidEtlTemplates(templatesMutableDictionary);
            FoundErrorsInTemplates     = foundErrorsInXml || (nrOfItemsBeforeCheckingEtl != templatesMutableDictionary.Count);

            templates = templatesMutableDictionary.ToImmutableDictionary(StringComparer.InvariantCultureIgnoreCase);
        }
        public CachedTemplateRepository(
            IEtlParseService etlParser,
            IMemoryCache memoryCache,
            IHostEnvironment hostEnvironment,
            IConfiguration configuration,
            ILogger <CachedTemplateRepository> logger,
            ILoggerFactory loggerFactory
            )
        {
            this.logger = logger;
            if (!memoryCache.TryGetValue(templatesCacheKey, out templateRepository))
            {
                logger.LogInformation("Refreshing templates-dictionary.");
                var templateDirectoryPath     = GetTemplateDirectoryPath(configuration);
                var templateDirectoryContents = GetTemplateDirectoryContents(templateDirectoryPath, hostEnvironment);
                templateRepository = new XmlFileTemplateRepository(etlParser, templateDirectoryContents, loggerFactory.CreateLogger <XmlFileTemplateRepository>());

                memoryCache.Set(templatesCacheKey, templateRepository, hostEnvironment.ContentRootFileProvider.Watch($"{templateDirectoryPath}\\*\\*.xml"));
            }
        }