private IConfigurationContext MergeConfiguration(IConfigurationContext context)
        {
            var defaultSettings = new Configuration.ConfigurationSettings();
            var configSection = ConfigurationHelper.GetConfigSection<Configuration.ConfigurationSection>();

            // If the value is in the config use that
            // Otherwise, if the value is already set via fluent config use that
            // Otherwise use the default value
            if (configSection != null)
            {
                if (!String.IsNullOrWhiteSpace(configSection.ConnectionStringName))
                {
                    context.SetConnectionString(ConfigurationManager.ConnectionStrings[configSection.ConnectionStringName].ConnectionString);
                }
                else if (context.GetConnectionString() == null)
                {
                    context.SetConnectionString(defaultSettings.ConnectionString);
                }

                if (!String.IsNullOrWhiteSpace(configSection.Exchange))
                {
                    context.SetExchange(configSection.Exchange);
                }
                else if (context.GetExchange() == null)
                {
                    context.SetExchange(defaultSettings.Exchange);
                }
            }

            return context;
        }
        private IConfigurationContext MergeConfiguration(IConfigurationContext configuration)
        {
            var defaultSettings = new Configuration.ConfigurationSettings();
            var configSection = ConfigurationHelper.GetConfigSection<Configuration.ConfigurationSection>();

            if (configSection != null)
            {
                if (!String.IsNullOrWhiteSpace(configSection.RunAs.UserType))
                {
                    switch (configSection.RunAs.UserType.ToUpper())
                    {
                        case "LOCALSERVICE":
                            configuration.SetUserType(Configuration.RunAs.LocalService);
                            break;
                        case "LOCALSYSTEM":
                            configuration.SetUserType(Configuration.RunAs.LocalSystem);
                            break;
                        case "NETWORKSERVICE":
                            configuration.SetUserType(Configuration.RunAs.NetworkService);
                            break;
                        case "USER":
                            configuration.SetUserType(Configuration.RunAs.User);
                            break;
                    }

                    if (!String.IsNullOrWhiteSpace(configSection.RunAs.Username))
                    {
                        configuration.SetUsername(configSection.RunAs.Username);
                    }

                    if (!String.IsNullOrWhiteSpace(configSection.RunAs.Password))
                    {
                        configuration.SetPassword(configSection.RunAs.Password);
                    }
                }

                if (!String.IsNullOrWhiteSpace(configSection.Service.Description))
                {
                    configuration.SetDescription(configSection.Service.Description);
                }

                if (!String.IsNullOrWhiteSpace(configSection.Service.DisplayName))
                {
                    configuration.SetDisplayName(configSection.Service.DisplayName);
                }

                if (!String.IsNullOrWhiteSpace(configSection.Service.Name))
                {
                    configuration.SetServiceName(configSection.Service.Name);
                }
            }

            // Set Defaults
            if (String.IsNullOrWhiteSpace(configuration.GetServiceName()))
            {
                configuration.SetServiceName(configuration.AssemblyLocator.GetEntryAssembly().GetName().Name);
            }

            if (String.IsNullOrWhiteSpace(configuration.GetDescription()))
            {
                configuration.SetDescription("Wave Service Host");
            }

            if (String.IsNullOrWhiteSpace(configuration.GetDisplayName()))
            {
                configuration.SetDisplayName(configuration.AssemblyLocator.GetEntryAssembly().GetName().Name);
            }

            return configuration;
        }
        private IConfigurationContext MergeConfiguration(IConfigurationContext context)
        {
            var defaultSettings = new Configuration.ConfigurationSettings();
            var configSection = ConfigurationHelper.GetConfigSection<Configuration.ConfigurationSection>();

            // If the value is in the config use that
            // Otherwise, if the value is already set via fluent config use that
            // Otherwise use the default value
            if (configSection != null)
            {
                if (!String.IsNullOrWhiteSpace(configSection.Hostname))
                {
                    context.SetHostname(configSection.Hostname);
                }
                else if (context.GetHostname() == null)
                {
                    context.SetHostname(defaultSettings.Hostname);
                }

                if (!String.IsNullOrWhiteSpace(configSection.MulticastAddress))
                {
                    context.SetMulticastAddress(configSection.MulticastAddress);
                }
                else if (context.GetMulticastAddress() == null)
                {
                    context.SetMulticastAddress(defaultSettings.MulticastAddress);
                }
            }

            return context;
        }