1

ASP.NET 3.5Comment puis-je améliorer nos CM.AppSettings références

classes tout au long de notre solution ConfigurationManater.AppSettings référencé [ ""] pour obtenir appsettings (de web.config). Nous avons décidé que nous n'étions pas satisfaits de cela. Les gens ont mal saisi les noms de clés appSetting dans le code (qui a bien compilé), et il était difficile de suivre les usages. Et puis, il y a les chaînes dupliquées dans la base de code lorsque vous référencez les mêmes appSettings partout. Donc, nous avons décidé qu'une seule classe serait autorisée à référencer le ConfigurationManager, et le reste de la solution référencerait cette classe quand elle aurait besoin de la valeur d'un certain appSetting. ConfigurationManater.AppSettings [""] était statique, nous avons donc exposé un tas de propriétés statiques en lecture seule hors de notre classe unique de paramètres.

public class Settings { 
    public static string Foo { 
     get { 
      return ConfigurationManager.AppSettings["Foo"]; 
     } 
    } 
} 

Cela a plutôt bien fonctionné, jusqu'à ce que nous ayons besoin de simuler les paramètres dans nos tests. Nous avons créé une interface pour permettre notre moquerie (était-ce une erreur de toute sorte?).

public interface ISettings { 
    string Foo { 
     get; 
     set; 
    } 

} 

public class Settings : ISettings { 
    public string Foo { 
     get { 
      return ConfigurationManager.AppSettings["Foo"]; 
     } 
    } 
} 

Et maintenant, nous injectons l'instance ISettings comme une dépendance des objets qui utilisent des valeurs de paramètres (la classe/interface sont dans un projet que tout le monde peut faire référence sans problème). Dans les endroits où nous ne pouvons pas injecter une instance existante (par exemple Global.asax), nous construisons une nouvelle instance dans un champ statique.

Compte tenu de tout cela, que recommanderiez-vous de changer, et pourquoi? L'utilisation d'une interface pour représenter la configuration est une bonne idée.

Répondre

0

Mais votre mise en œuvre semble un peu éteinte. Joshua Flanagan a écrit à propos de l'écriture du code de configuration de l'application de manière à ce que des sections de configuration spécifiques puissent être injectées dans votre code. C'est une bonne idée, car il découplage vraiment votre code de s'inquiéter des détails derrière la configuration. Have a read. Je pense que cela permettra de résoudre le problème que vous rencontrez. testabilité.