Ich habe einige globale Komponenten Ich bin mir nicht sicher, wie man sie in Design einfügt. Wie zum Beispiel:Setter Injection oder Ambient Context Muster
Einstellungen Klasse: es die Anfangseinstellungen des Programms ist eine Schnittstelle, könnte es app.config (1way), web.config (1way), hart codierte Werte (1-fach) werden, oder sqldb (2way) hinter den Kulissen.
Sprachklasse: es enthält verschiedene Sprachensätze, und wieder konnte ich einige resx Dateien (1-fach) hat, hart codierte Werte (1-fach) oder sqldb (2-fach) dahinter.
Die erste Frage ist, sollte ich diese Klassen Set-Eigenschaften in Abhängigkeit Injection machen (ich benutze Windsor):
public ISettings Settings {set;}
public ILanguage Language {set;}
Oder soll ich sie Umgebungskontext machen:
string DoSomethingAndReportIt() {
//do something ...
var param = Settings.Current.SomeParam;
//report it ...
return Language.Current.SomeClass_SomeMethod_Job_Done;
}
I Beachten Sie, dass es einige Komponenten in der .net-Bibliothek gibt, die ein Umgebungskontextmuster verwenden, z System.Security.Principal, System.Web.ProfileBase, System.Thread.CurrentCulture ...
Glaubst du, es ist kein Schaden, um meine globalen Klassen wie Einstellungen und Sprache zu Umgebungskontextklassen zu machen? Wenn nicht, warum wird DI bevorzugt? Nutzen sie den Komponententest im Vergleich zur Umgebung besser? Die zweite Frage ist, wenn DI besser ist, (ich habe das Gefühl, dass das DI-Muster bevorzugt wird), was ist eine gute Möglichkeit, die vorhandenen Umgebungsklassen wie Security.Principal oder Profile zu übernehmen, um dem DI-Muster zu folgen?
Warum magst du keinen Umgebungskontext? – Ziv