Sometimes having just setters and getters is not enough or you need to get a configuration key by name you know only at runtime. That's where dynamic configuration comes in place.
With dynamic configuration you can declare methods in configuration interface, not just properties. Have a look at this example:
public interface ICallableConfig
{
string GetName(string keyName);
}
Calling the method will make Config.Net to read configuration using with key set to Name.value of keyName
. For instance calling this method as .GetName("my_key")
will return a value by key Name.my_key
.
The first part of the key comes from the method name itself (any Get
or Set
method prefixes are removed automatically). The [Option]
attribute applies here if you'd like to customise the key name i.e.
public interface ICallableConfig
{
[Option(Alias = "CustomName")]
string GetName(string keyName);
}
changes the key to CustomName.value of keyName
.
Please take a special note that if you call a method just Get(string name)
Config.Net will read settings from a root namespace i.e. Get("myprop")
will return a value by key myprop
. Essentially this allows you to read from the store dynamically, however you are losing the ability of performing type safe conversions.
You can declare a method with as many parameters as you want, they will be simply chained together when deciding which key name to use, for example:
public interface ICallableConfig
{
string GetName(string keyName, string subKeyName);
}
will read configuration with key Name.value of keyName
.value of subKeyName
etc.
The same way as you declare a method to read values, you can also declare methods for writing values. The only difference is that a method which writes values must be void. The last parameter of a writing method is considered a value parameter, for example:
public interface ICallableConfig
{
void SetName(string keyName, string value);
}