public ServiceFabricEnvironmentSync(Action <bool> exitCallback)
        {
            this.exitCallback = exitCallback;

            this.certificateManager = null;

            this.certificateManagerTask = null;

            this.certificateManagerCancellationTokenSource = new CancellationTokenSource();
        }
        public void Start()
        {
            string applicationDirectory = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);

            this.certificateManager = new EnvironmentCertificateManager(applicationDirectory);

            APRuntime.Initialize(StringConstants.ApplicationConfigurationFileName);

            TextLogger.InitializeLogging(StringConstants.CustomLogIdName);

            TextLogger.LogInfo("Starting Service Fabric Environment Sync.");

            if (!ConfigurationManager.GetCurrentConfigurations())
            {
                this.Exit(false);

                return;
            }

            TextLogger.SetLogLevel(ConfigurationManager.LogLevel);

            if (!this.certificateManager.GetEnvironmentCertificatesFromCurrentConfigurations())
            {
                this.Exit(false);

                return;
            }

            this.RegisterConsoleCancelEventNotifications();

            this.certificateManagerTask = Task.Factory.StartNew(
                () => this.RunCertificateManager(this.certificateManagerCancellationTokenSource.Token),
                this.certificateManagerCancellationTokenSource.Token,
                TaskCreationOptions.LongRunning,
                TaskScheduler.Default);
        }