public FileSystemMonitorService Create(ServiceConfiguration configuration)
        {
            _logger.Log(LogLevel.Trace, "[Start]: File system monitor service creation");
            var fileSystemMonitorService = _fileSystemMonitorServiceFactory.Create(configuration);
            _logger.Log(LogLevel.Trace, "[End]: File system monitor service creation");

            return fileSystemMonitorService;
        }
        public FileSystemMonitorService(
            ServiceConfiguration configuration,
            IFolderWatcherFactory folderWatcherFactory,
            Func<IFileService> fileServiceFactory,
            SynchronizationServiceFactory synchronizationServiceFactory,
            ILogger logger)
        {
            _logger = logger;
            _folderWatcherFactory = folderWatcherFactory;
            _folderWatcher = folderWatcherFactory.Create(configuration.FolderToMonitor);
            _fileServiceFactory = fileServiceFactory;
            _synchronizationServiceFactory = synchronizationServiceFactory;
            _configuration = configuration;

            _serviceShutdownEvent = new ManualResetEventSlim(false);
            _fileProcessingRoutine = new Task(this.RunServiceOperation, TaskCreationOptions.LongRunning);
            _operationQueue = new Queue<FileSystemWatcherEventArgs>();

            this.SubscribeToEvents();
            this.InitializeServiceState(configuration);
        }
 private void InitializeServiceState(ServiceConfiguration configuration)
 {
     this.CanStop = true;
     this.AutoLog = false;
     this.ServiceName = configuration.ServiceName ?? DefaultServiceName;
 }
 public FileSystemMonitorService Create(ServiceConfiguration configuration)
 {
     return _factory.Invoke(configuration);
 }