2010-01-06 5 views
5

J'ai un site ASP.NET MVC qui se compose de 3 projets dans une solution:Comment stocker les paramètres de mon site ASP.NET MVC?

DomainModel (Bibliothèque de classes - Peut contenir LINQ repo)
DomainServices (Bibliothèque de classes - Maintient Business Logic)
WebUI (Site ASP.NET MVC)

J'ai besoin d'un endroit pour stocker un ensemble de paramètres pour notre site qui peut être configuré via XML.

Dans quel projet devrait-il aller? Quelqu'un at-il un exemple de la façon dont ils chargent et ensuite accéder à leurs paramètres à travers ces différents projets? Est-ce que je charge le fichier XML une fois, dans le constructeur d'une classe C# qui contient des propriétés pour tous mes paramètres? Est-ce que quelqu'un peut me donner des exemples et des conseils sur le stockage des paramètres dans un fichier XML pour une solution multi-projets?

Répondre

8

Les paramètres sont généralement stockés dans web.config. Tous les assemblys ont accès à ces paramètres.

ConfigurationManager.AppSettings["key"] 

Vous devez ajouter une référence à system.configuration.dll

1

Je le stockerais dans un nouveau service avec une interface.

Ce que je fais est d'avoir une classe ont toutes les propriétés/paramètres. Cela permettrait également de gérer le fichier XML. Un conteneur Inversion of Control vous permet de les injecter en injectant des dépendances dans vos autres classes.

+0

Je considérais ce qui en fait une classe statique étant donné que je ne pense pas que je vais avoir besoin plusieurs instances de celui-ci. Pas sûr cependant. – Rinndar

+0

un conteneur IoC approprié n'en construira qu'un par défaut. –

2

Je suis d'accord avec Mathias à utiliser la méthode par défaut offerte par le cadre. Cependant, vous pouvez (si, à mon humble avis) faire encore une sorte de classe wrapper, probablement derrière une interface pour faciliter moqueuse dans les tests unitaires, par exemple:

class MyAppSettings 
{ 
    public int SomeSetting 
    { 
     get 
     { 
     return Convert.ToInt32(ConfigurationManager.AppSettings["SomeSetting"]); 
     } 
    } 
} 
0

Définir une propriété partagée dans votre bibliothèque de classes pour maintenir les paramètres de l'application (une instance de Specialized.NameValueCollection). Ensuite, dans la logique de votre site, définissez cette nouvelle propriété sur vos paramètres ASP.NET à partir de web.config dans le sous-programme Application_Start de global.asax.

Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs) 
    ' Code that runs on application startup 
    DomainModel.Common.AppSettings = ConfigurationManager.AppSettings 
End Sub 

De cette façon, vous pouvez accéder aux paramètres des projets de la bibliothèque de classes.

7

Plutôt que d'utiliser AppSettings, ce qui est juste une collection de paires de valeurs clés, pensez à définir votre propre structure de configuration à l'aide ConfigurationSection ou IConfigurationSectionHandler

De cette façon, vous obtenez toute la sécurité de la classe d'emballage, et il n'a pas encombrer vos AppSettings (et est bien défini quelque part pour votre utilisation). Encore mieux, définissez votre propre schéma XML, et utilisez XmlSerialization/Deserialization pour stocker ce fichier en dehors de web.config, en écoutant les changements sur celui-ci (attachez-le au cache, peu importe).

Si vous le faites de cette façon, vous n'avez pas besoin de modifier web.config pour obtenir les modifications et vous n'avez donc pas besoin de redémarrer votre application Web en perdant la session/cache dans le processus.

pas bien des applications Web sans état par écrit devrait se soucier de perdre la session/cache - mais il y a toujours quelqu'un ... :)

Questions connexes