/// <summary>
        /// A generic version of the Factory method to create directory source
        /// </summary>
        /// <typeparam name="TData">Parser output type</typeparam>
        /// <typeparam name="TLogContext">Log context</typeparam>
        /// <param name="context">Plug-in Context</param>
        /// <param name="recordParser">Record Parser</param>
        /// <returns>Event Source</returns>
        public static IEventSource <TData> CreateEventSource <TData, TLogContext>(
            IPlugInContext context,
            IRecordParser <TData, TLogContext> recordParser
            ) where TLogContext : LogContext, new()
        {
            IConfiguration config = context.Configuration;

            GetDirectorySourceParameters(config, out string directory, out string filter, out int interval);
            DirectorySource <TData, TLogContext> source = new DirectorySource <TData, TLogContext>(
                directory,
                filter,
                interval * 1000, //milliseconds
                context,
                recordParser);

            source.NumberOfConsecutiveIOExceptionsToLogError = 3;

            EventSource <TData> .LoadCommonSourceConfig(config, source);

            source.Id = config[ConfigConstants.ID] ?? Guid.NewGuid().ToString();
            return(source);
        }
        public static IEventSource <TData> CreateEventSource <TData, TContext>(
            IPlugInContext context,
            IRecordParser <TData, TContext> recordParser,
            Func <string, long, TContext> logSourceInfoFactory
            ) where TContext : LogContext
        {
            IConfiguration config          = context.Configuration;
            string         directory       = config["Directory"];
            string         filter          = config["FileNameFilter"];
            string         intervalSetting = config["Interval"];
            int            interval        = 0; //Seconds

            if (!string.IsNullOrEmpty(intervalSetting))
            {
                int.TryParse(intervalSetting, out interval);
            }
            if (interval == 0)
            {
                interval = 1;
            }

            DirectorySource <TData, TContext> source = new DirectorySource <TData, TContext>(
                directory,
                filter,
                interval * 1000, //milliseconds
                context,
                recordParser,
                logSourceInfoFactory);

            source.NumberOfConsecutiveIOExceptionsToLogError = 3;

            EventSource <TData> .LoadCommonSourceConfig(config, source);

            source.Id = config[ConfigConstants.ID] ?? Guid.NewGuid().ToString();
            return(source);
        }