The sample below shows that you can use interfaces with a singleton class (which is impossible with static class.)
I prefer this pattern above a large list of static methods/properties or several static classes.
Those interfaces can provide subject specific settings which can even be used as parameters to other methods or classes without that those classes need to know where the settings come from, as long as the contract is respected.
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; }
}
And this can be used in a simple manner as as:
IOSettings iosettings = Settings.Instance as IOSettings;
if(iosettings!=null){
Filereader.ReadData(IOSettings iosettings);
}
or
IUserSettings usersettings = Settings.Instance as IUserSettings;
if(usersettings!=null){
UserManager.Login(IUserSettings usersettings);
}