Sto sviluppando un'applicazione contenente una classe che carica le impostazioni dell'applicazione da un file di configurazione.
Classe impostazioni:
public sealed class MyAppSettings : IMyAppSettings
{
private IMyAppSettings DefaultSettingsInstance;
public MyAppSettings()
{
DefaultLanguage = "en";
var config = ConfigurationManager.GetSection("MyAppSettings") as NameValueCollection;
if (config != null)
{
if (!string.IsNullOrEmpty(config["DefaultLanguage"]))
DefaultLanguage = config["DefaultLanguage"];
}
}
public static IMyAppSettings Default
{
get
{
return DefaultSettingsInstance ?? (DefaultSettingsInstance = new MyAppSettings());
}
set
{
if (value == null)
throw new ArgumentNullException("value");
DefaultSettingsInstance = value;
}
}
public string DefaultLanguage { get; private set; }
}
Classe che utilizza l'impostazione (versione 1):
public sealed class SomeClass
{
public SomeFunction()
{
// Using language setting here
if(MyAppSettings.Default.DefaultLanguage == "en")
{
...
}
}
}
o versione 2:
public sealed class SomeClass
{
private readonly string _defaultLanguage;
public SomeClass(string defaultLanguage)
{
if(string.IsNullOrEmpty(defaultLanguage))
throw new ArgumentNullException("defaultLanguage");
_defaultLanguage = defaultLanguage;
}
public SomeFunction()
{
// Using language setting here
if(_defaultLanguage == "en")
{
...
}
}
}
Entrambe le classi e l'interfaccia si trovano nello stesso assembly.
Quale approccio è migliore per le impostazioni di un'applicazione globale, passa attraverso l'iniezione di costruzione o utilizza un contesto ambientale o qualcos'altro?