Tengo algunos componentes globales No estoy seguro de cómo ponerlos en el diseño. Tales como:Patrón de Inyección Setter o contexto ambiental
Ajustes clase: una operación de interfaz los ajustes iniciales del programa, se podría App.config (1way), web.config (1way), valores codificados duro (1way), o sqldb (2way) detrás de las escenas.
clase Idioma: que contiene diferentes grupos de idiomas, y de nuevo, podría haber algunos archivos resx (1way), los valores no modificables (1way) o sqldb (2 vías) detrás de él.
primera pregunta es, ¿debería hacer estas propiedades clases Setter en la inyección de dependencias (yo uso Windsor):
public ISettings Settings {set;}
public ILanguage Language {set;}
o debería ellos hacer contexto ambiental:
string DoSomethingAndReportIt() {
//do something ...
var param = Settings.Current.SomeParam;
//report it ...
return Language.Current.SomeClass_SomeMethod_Job_Done;
}
I Observe que hay algunos componentes en la biblioteca .net que en realidad usan un patrón de contexto ambiental, por ejemplo System.Security.Principal, System.Web.ProfileBase, System.Thread.CurrentCulture ...
¿Cree que no es perjudicial hacer que mis clases globales, como Configuración e Idioma, sean clases de contexto ambiental? Si no, ¿por qué se prefiere DI? ¿Toman más ventaja en las pruebas unitarias en comparación con el ambiente?
La segunda pregunta es, si DI es mejor, (tengo la sensación de que se prefiere el patrón DI), ¿cuál es una buena forma de proxy de las clases ambientales existentes como Security.Principal o Profile para seguir el patrón DI?
¿Por qué no te gusta el contexto ambiental? – Ziv