Для интерфейса я бы сделал что-то вроде этого:
public interface ISettingsProvider
{
void Load();
T Query<T>(string key);
void Set<T>(string key, T value);
void Save();
}
Затем я бы реализовал этот интерфейс один раз, и зависимость добавила бы его, скажем, MEF.Я предполагаю, что я реализовал бы это с LinqToXml, чтобы загрузить / сохранить в XML и, возможно, иметь словарь для кэширования настроек в памяти.Другим способом будет двоичная сериализация ваших объектов и выгрузка снимка куда-нибудь (у которого есть свои недостатки, например, он не читается человеком).
Если вы сохраняете только строки и / или числа, XML является хорошим выбором,Если у вас есть только строки, вы можете даже отказаться от дженериков.