При чтении моего раздела конфигурации я хочу вызвать метод для преобразования указанного значения в ConsoleKey, если это возможно.
Мой раздел конфигурации выглядит следующим образом:
<configuration>
<configSections>
<section name="SettingsContainer" type="Input.SettingsContainer, Input" />
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
</startup>
<appSettings>
</appSettings>
<SettingsContainer>
<Bindings>
<Binding KeyBinding="1" Description="Test description" />
</Bindings>
</SettingsContainer>
При чтении значения KeyBinding
я хочу попытаться преобразовать его в ConsoleKey
. В этом случае значение в конфигурации составляет 1
, и я хочу преобразовать это в ConsoleKey.NumPad1
.
Мой элемент конфигурации выглядит следующим образом:
class SettingsContainer : ConfigurationSection
{
[ConfigurationProperty("Bindings")]
public Bindings Bindings
{
get
{
return base["Bindings"] as Bindings;
}
}
}
[ConfigurationCollection(typeof(Binding), AddItemName = "Binding")]
public class Bindings : ConfigurationElementCollection, IEnumerable<Binding>
{
protected override ConfigurationElement CreateNewElement()
{
return new Binding();
}
protected override object GetElementKey(ConfigurationElement element)
{
var l_configElement = element as Binding;
if (l_configElement != null) return l_configElement.KeyBinding;
else return null;
}
public Binding this[int index]
{
get
{
return BaseGet(index) as Binding;
}
}
IEnumerator<Binding> IEnumerable<Binding>.GetEnumerator()
{
return (from i in Enumerable.Range(0, this.Count)
select this[i])
.GetEnumerator();
}
}
public class Binding : ConfigurationElement
{
[ConfigurationProperty("KeyBinding", IsRequired = true)]
public ConsoleKey KeyBinding
{
get
{
// This is where I'm attempting to pass my configuration value
// into my method, in order to return a ConsoleKey
return GetConsoleKeyFromString(base["KeyBinding"] as string);
}
set
{
base["KeyBinding"] = value;
}
}
[ConfigurationProperty("Description", IsRequired = true)]
public string Description
{
get
{
return base["Description"] as string;
}
set
{
base["Description"] = value;
}
}
private ConsoleKey GetConsoleKeyFromString(string keyStr)
{
Regex rex = new Regex("^[0-9]+$");
try
{
return (ConsoleKey)Enum.Parse(typeof(ConsoleKey), string.Format("NumPad{0}", keyStr), true);
}
catch
{
throw new ConfigurationErrorsException("Unknown value provided for KeyBinding");
}
}
}
Я пытаюсь передать значение KeyBinding
в GetConsoleKeyFromString
, чтобы вернуть соответствующее ConsoleKey
.
Проблема, с которой я столкнулся, заключается в том, что значение, переданное этому методу, равно null
. Как я могу передать свое KeyBinding
значение из моего app.config в мой GetConsoleKeyFromString
, чтобы преобразовать строковое значение в ConsoleKey?
EDIT
Просто для полноты я обновил свой класс ConfigurationSection, чтобы он содержал полный код. Кроме того, я использую код ниже, чтобы попытаться получить эту конфигурацию:
var Settings = (SettingsContainer)ConfigurationManager.GetSection("SettingsContainer") as SettingsContainer;