public static Config GetInstance()
        {
            if (_config == null)
            {
                _config = new Config();

                var configPath = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location) + "\\config.xml";
                if (File.Exists(configPath))
                {
                    var doc = XDocument.Load(configPath);
                    foreach (var grabber in doc.Descendants("Grabber"))
                    {
                        var g = new GrabberSettings();
                        g.Path = grabber.Attribute("path").Value;
                        if (string.IsNullOrEmpty(g.Path))
                            continue; // no path , nothing to do here
                        g.ChannelPrefix = grabber.Attribute("channelPrefix") != null ? grabber.Attribute("channelPrefix").Value : string.Empty;
                        var translationElement = grabber.Descendants("Translate").FirstOrDefault();
                        if (translationElement != null)
                        {
                            g.Translation = new GrabberTranslationSettings();
                            g.Translation.From = (Language)Enum.Parse(typeof(Language), translationElement.Attribute("From").Value);
                            g.Translation.To = (Language)Enum.Parse(typeof(Language), translationElement.Attribute("To").Value);
                        }
                        var paramElement = grabber.Descendants("Parameters").FirstOrDefault();
                        if (paramElement != null)
                            g.Parameters = paramElement.ToString();
                        _config.Grabbers.Add(g);
                    }
                    var outputElement = doc.Descendants("Output").FirstOrDefault();
                    if (outputElement != null)
                    {
                        var pathElement = outputElement.Descendants("Path").FirstOrDefault();
                        if (pathElement != null)
                            _config.OutputPath = pathElement.Value;
                    }
                    var loggerElement = doc.Descendants("Logger").FirstOrDefault();
                    if (loggerElement != null && loggerElement.Attribute("Type") != null)
                    {
                        _config.LoggerType = loggerElement.Attribute("Type").Value;
                        var loggerParameters = loggerElement.Descendants("Parameters").FirstOrDefault();
                        if (loggerParameters != null)
                            _config.LoggerParameters = loggerParameters.ToString();
                    }
                    var translatorCache = doc.Descendants("TranslatorCache").FirstOrDefault();
                    if (translatorCache != null && translatorCache.Attribute("Type") != null)
                    {
                        _config.TranslatorCacheSettings = new TranslatorCacheSettings();
                        _config.TranslatorCacheSettings.Type = TranslatorCacheSettingsType.File;
                        _config.TranslatorCacheSettings.OutputFile = translatorCache.Attribute("OutputFile").Value;
                    }
                    var HaltOnGrabberErrorElement = doc.Descendants("HaltOnGrabberError").FirstOrDefault();
                    if (HaltOnGrabberErrorElement != null && !string.IsNullOrEmpty(HaltOnGrabberErrorElement.Value))
                        _config.HaltOnGrabberError = Convert.ToBoolean(HaltOnGrabberErrorElement.Value);
                }
            }
            return _config;
        }
        public static Config GetInstance()
        {
            if (_config == null)
            {
                _config = new Config();

                var configPath = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location) + "\\config.xml";
                if (File.Exists(configPath))
                {
                    var doc = XDocument.Load(configPath);
                    foreach (var grabber in doc.Descendants("Grabber"))
                    {
                        var g = new GrabberSettings();
                        g.Path = grabber.Attribute("path").Value;
                        if (string.IsNullOrEmpty(g.Path))
                        {
                            continue; // no path , nothing to do here
                        }
                        g.ChannelPrefix = grabber.Attribute("channelPrefix") != null?grabber.Attribute("channelPrefix").Value : string.Empty;

                        var translationElement = grabber.Descendants("Translate").FirstOrDefault();
                        if (translationElement != null)
                        {
                            g.Translation      = new GrabberTranslationSettings();
                            g.Translation.From = (Language)Enum.Parse(typeof(Language), translationElement.Attribute("From").Value);
                            g.Translation.To   = (Language)Enum.Parse(typeof(Language), translationElement.Attribute("To").Value);
                        }
                        var paramElement = grabber.Descendants("Parameters").FirstOrDefault();
                        if (paramElement != null)
                        {
                            g.Parameters = paramElement.ToString();
                        }
                        _config.Grabbers.Add(g);
                    }
                    var outputElement = doc.Descendants("Output").FirstOrDefault();
                    if (outputElement != null)
                    {
                        var pathElement = outputElement.Descendants("Path").FirstOrDefault();
                        if (pathElement != null)
                        {
                            _config.OutputPath = pathElement.Value;
                        }
                    }
                    var loggerElement = doc.Descendants("Logger").FirstOrDefault();
                    if (loggerElement != null && loggerElement.Attribute("Type") != null)
                    {
                        _config.LoggerType = loggerElement.Attribute("Type").Value;
                        var loggerParameters = loggerElement.Descendants("Parameters").FirstOrDefault();
                        if (loggerParameters != null)
                        {
                            _config.LoggerParameters = loggerParameters.ToString();
                        }
                    }
                    var translatorCache = doc.Descendants("TranslatorCache").FirstOrDefault();
                    if (translatorCache != null && translatorCache.Attribute("Type") != null)
                    {
                        _config.TranslatorCacheSettings            = new TranslatorCacheSettings();
                        _config.TranslatorCacheSettings.Type       = TranslatorCacheSettingsType.File;
                        _config.TranslatorCacheSettings.OutputFile = translatorCache.Attribute("OutputFile").Value;
                    }
                    var HaltOnGrabberErrorElement = doc.Descendants("HaltOnGrabberError").FirstOrDefault();
                    if (HaltOnGrabberErrorElement != null && !string.IsNullOrEmpty(HaltOnGrabberErrorElement.Value))
                    {
                        _config.HaltOnGrabberError = Convert.ToBoolean(HaltOnGrabberErrorElement.Value);
                    }
                }
            }
            return(_config);
        }