Приведенные ниже пример показывает, что вы можете использовать интерфейсы с одноплодным классом (что невозможно со статическим классом.)
Я предпочитаю эту модель выше большого список статических методов/свойства или несколько статических классов.
Эти интерфейсы могут предоставлять конкретные параметры, которые могут быть использованы в качестве параметров для других методов или классов, без того, чтобы эти классы должны были знать, откуда взялись настройки, при условии соблюдения контракта.
public sealed class Settings : IUserStettings, IOSettings
{
static readonly Settings instance = new Settings();
static Settings(){ }
Settings(){ }
public static Settings Instance
{
get { return instance; }
}
//-- interface implementation
public string UserName
{
get { throw new NotImplementedException(); }
}
// ---etc...
public string filename
{
get { throw new NotImplementedException(); }
}
//-- interface implementation
}
public interface IOSettings
{
string disk {get;}
string path { get; }
string filename { get; }
}
public interface IUserStettings
{
string UserName { get; }
string Password { get; }
}
И это может быть использовано в простой форме, как, как:
IOSettings iosettings = Settings.Instance as IOSettings;
if(iosettings!=null){
Filereader.ReadData(IOSettings iosettings);
}
или
IUserSettings usersettings = Settings.Instance as IUserSettings;
if(usersettings!=null){
UserManager.Login(IUserSettings usersettings);
}
Но ленивая загрузка, кеширование и сериализация настроек конфигурации из xmlDocument также является хорошей практикой;) –
+ 1 для написания всех шагов thye. – TalentTuner