private static TOptions SetEnvironmentVariables <TOptions>(TOptions eventStoreArguments, string environmentPrefix) where TOptions : class, IOptions, new() { var instanceToUseForDefaultValueComparrison = new TOptions(); foreach (var property in typeof(TOptions).GetProperties()) { var defaultValue = property.GetValue(instanceToUseForDefaultValueComparrison, null); var environmentVariableName = EnvironmentVariableNameProvider.GetName(environmentPrefix, property.Name); var environmentVariableValue = Environment.GetEnvironmentVariable(environmentVariableName); var currentValue = property.GetValue(eventStoreArguments, null); if (defaultValue != null && defaultValue.Equals(currentValue) && environmentVariableValue != null) { try { var typeConverter = GetTypeConverter(property.PropertyType); var valueToUse = typeConverter.ConvertFrom(environmentVariableValue); SetDumpedOptions(property.Name, FromEnvironmentVariable, valueToUse); property.SetValue(eventStoreArguments, valueToUse, null); } catch (Exception ex) { throw new OptionException(ex.Message, property.Name); } } } return(eventStoreArguments); }
public OptionSource[] Parse <TOptions>(string environmentPrefix) where TOptions : class { _parsedOptions = new List <OptionSource>(); foreach (var property in typeof(TOptions).GetProperties()) { var environmentVariableName = EnvironmentVariableNameProvider.GetName(environmentPrefix, property.Name); var environmentVariableValue = Environment.GetEnvironmentVariable(environmentVariableName); if (!String.IsNullOrEmpty(environmentVariableValue)) { _parsedOptions.Add(new OptionSource("Environment Variable", property.Name, environmentVariableValue)); } } return(_parsedOptions.ToArray()); }