IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Accessibilité du config


Sujet :

C#

  1. #1
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut Accessibilité du config
    Bonjour

    Je cherche la maniere la plus elégante d'acceder au config a travers toute l'app

    Puis-je le declarer static Public quelque part, dans le main par exemple ?

    J'ai essayé mais sans succes
    Je seche un peu là !

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    tu parles du fichier app.config ? il est déjà accessible de toute l'appli, avec la classe ConfigurationManager...

  3. #3
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    Salut Tomlev

    Non je parlais de DefaultNameSpace.MapScopeNG.Properties.Settings

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
         MapScopeNG.Properties.Settings Config = new MapScopeNG.Properties.Settings();
          imPathDst = Config.PathImagesDst;
    C'est ce que j'emploie mais le fait d'etre tributaire du DefaultNameSpace me derange

    Je ne connais pas App.Config
    Ou plutot je pensais y acceder avec le code ci-dessus !


    J'ai utilisé maintenant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
          ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap();
          fileMap.ExeConfigFilename = "Divers.config";
          Configuration Config = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None);
    Mais je suis ouvert a toute les suggestion car c'est un peu la bouteille a encre cette gestion des config

    D'ailleurs quand j'ai commencé avec .NET il y a qq mois j'ai commencé par me faire une petite classe du style gestion de .ini avec l'API windows car je trouvais cela beaucoup plus simple que les usines a gaz proposées pour les config qui ne me paraissent toujours pas vraiment claires !

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    je comprends pas trop ce qui pose problème... tu n'as pas besoin de créer une instance de Settings, il y en a une qui est déjà créée : MonNamespace.Properties.Settings.Default
    (Default étant une propriété statique de la classe Settings, donc accessible de toute l'appli)

  5. #5
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    Bonsoir Tomlev

    Ok, Admetons que

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MonNamespace.Properties.Settings.Default
    soit accessible, ca me permet de ne pas creer l'instance mais je n'y gagne pas grand chose :

    Voici un exemple de probleme :

    J'ai quelque classe dans un Folder "common" que je partage a travers differents projets !

    Ce sont des outils génériques destinés a le rester mais en constante evolution (NON ! : ne me dis pas d'en faire une dll !);

    Le problème c'est que pour certains j'aimerais acceder a la config de l'application pour lire ou ecrire certains settings.

    Donc il est exclu d'utiliser MonNamespace.Properties.Settings.Default qui n'est forcément pas généralisable a cause de l'acces par MonNamespace

    La seule solution que j'ai trouvé pour le moment c'est soit l'ini soit le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ConfigurationManager.OpenMappedExeConfiguration
    Et je me demande si l'ini n'est pas en définitive plus simple et plus souple.

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par olibara Voir le message
    NON ! : ne me dis pas d'en faire une dll !);
    Ben justement...

    Citation Envoyé par olibara Voir le message
    La seule solution que j'ai trouvé pour le moment c'est soit l'ini soit le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ConfigurationManager.OpenMappedExeConfiguration
    Et je me demande si l'ini n'est pas en définitive plus simple et plus souple.
    Ben je ne vois pas ce que ça change... avec un ini, il faudrait aussi que tu gardes quelque part une référence vers la conf que tu aurais chargé du fichier (à moins de lire le fichier à nouveau à chaque fois)

  7. #7
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    Tu a raison et c'est pour ca que j'ai quand meme gardé le configurationmanager

    Mais c'est quand meme dommage qu'on ne puisse pas acceder le

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MonNamespace.Properties.Settings.Default
    de maniere générique
    Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.Properties.Settings.Default

    Pour la dll, voici quelques (bonnes) raison

    1- Comme c'est en constante évolution et que l'evolution est +/- dictée par le projet actif c'est tres confortable d'agir directement a partir du projet en développement. Bien entendu le scribe attentif veillera a la généralisation de ce qu'il modifie !!

    2- Je trouve qu'il est tres agréable lors d'un install de pouvoir si possible se contenter d'UN exe sans devoir gerer un bataillon de DLL

    J'admet qu'il peut y avoir de bonnes raisons de défendre la DLL mais il y en a certainement d'autre pour défendre la méthode je j'emploie et qui s'avere tres efficace !

    Et crois moi, aucune regle de design n'a jamais transmuté un code foireux en modéle d'efficacité !

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Pour la DLL, je plaisantais bien sûr, tu fais comme tu veux

    Récemment j'ai un peu creusé le système de settings de Visual Studio, et c'est un peu tordu... en fait, j'ai l'impression que le seul moyen simple d'accéder aux settings est de passer par la classe générée par le designer. Apparemment le système utilise les propriétés déclarées dans cette classe avec l'attribut UserScopedSettingAttribute ou ApplicationScopedSettingAttribute pour savoir quelles propriétés existent dans le .config : si la propriété n'existe pas dans la classe et qu'elle existe dans le fichier, pas moyen de la lire (du moins, pas simplement). Bref, ce système est pratique tant que tu l'utilises dans le cadre prévu, mais dès que tu en sors, c'est un peu la m***e...

    Donc pour toi la façon la plus simple serait peut-être d'utiliser ton propre système de paramètres (je fais souvent ça en déclarant une classe "Config" que je sérialise en XML).

  9. #9
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    Mouis !

    Je te suis la !

    Cela etant, la methode alternative moyennant un petit emballage est peut etre la solution aussi

    Ca donne un truc comme ca
    N.B. : je n'ai pas d'expérience en sérialisation XML serait-ce encore plus simple que ce que je fais ci-dessous ?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    using System;
    using System.Windows.Forms;
    using System.Configuration;
     
     
    namespace BCPhoto
    {
     
      class ConfigPhoto
      {
        System.Configuration.Configuration Config;
     
        const string CST_SRC = "ImgPathSrc";
        const string CST_DST = "ImgPathDst";
        // ************************************************************************
        public String ImgPathSrc
        {
          get
          {
            if (Config.AppSettings.Settings[CST_SRC] == null)
            {
              return "";
            }
            return Config.AppSettings.Settings[CST_SRC].Value;
          }
          set
          {
            if (Config.AppSettings.Settings[CST_SRC] == null)
            {
              Config.AppSettings.Settings.Add(CST_SRC, value);
              Config.Save();
              return;
            }
            Config.AppSettings.Settings[CST_SRC].Value = value;
            Config.Save();
          }
        }
        // ************************************************************************
        public String ImgPathDst
        {
          get
          {
            if (Config.AppSettings.Settings[CST_DST] == null)
            {
              return "";
            }
            return Config.AppSettings.Settings[CST_DST].Value;
          }
          set
          {
            if (Config.AppSettings.Settings[CST_DST] == null)
            {
              Config.AppSettings.Settings.Add(CST_DST, value);
              Config.Save();
              return;
            }
            Config.AppSettings.Settings[CST_DST].Value = value;
            Config.Save();
          }
        }
        // ************************************************************************
        public ConfigPhoto()
        {
          ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap();
          fileMap.ExeConfigFilename = @"Photo.config";
          Config = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None);
          if (Config.AppSettings.Settings[CST_DST] == null)
          {
            MessageBox.Show("Warning no Photo path defined ! Please select one");
            FolderBrowserDialog opf = new FolderBrowserDialog();
            opf.ShowNewFolderButton = false;
            opf.ShowDialog();
            Config.AppSettings.Settings.Add(CST_DST,opf.SelectedPath);
            Config.Save();
          }
        }
      }
    }

  10. #10
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par olibara Voir le message
    N.B. : je n'ai pas d'expérience en sérialisation XML serait-ce encore plus simple que ce que je fais ci-dessous ?
    Plus simple, je sais pas, mais c'est pas bien compliqué... en supposant que tu aies une classe Config avec des propriétés représentant tes paramètres, tu peux faire ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    public static void SaveConfig(Config cfg, string filename)
    {
        XmlSerializer xs = new XmlSerializer(typeof(Config));
        StreamWriter wr = new StreamWriter(filename);
        xs.Serialize(wr, cfg);
        wr.Close();
    }
     
    public static Config LoadConfig(string filename)
    {
        XmlSerializer xs = new XmlSerializer(typeof(Config));
        StreamReader rd = new StreamReader(filename);
        Config cfg = xs.Deserialize(rd) as Config;
        rd.Close();
        return cfg;
    }

Discussions similaires

  1. Config carte reseau ethernet 10/100
    Par toto_titi dans le forum Réseau
    Réponses: 9
    Dernier message: 08/02/2012, 17h57
  2. [Config] Classes non trouvées
    Par newfsch dans le forum JBuilder
    Réponses: 2
    Dernier message: 27/01/2004, 21h12
  3. Fichier texte de config
    Par jeannot27 dans le forum C++Builder
    Réponses: 15
    Dernier message: 22/01/2004, 18h47
  4. fichier de config: refuse tcpip_socket=true.
    Par phil25 dans le forum Installation
    Réponses: 1
    Dernier message: 04/01/2004, 15h55
  5. [TomCat][sécurité]config fichier web.xml
    Par liomac dans le forum Tomcat et TomEE
    Réponses: 6
    Dernier message: 24/09/2003, 15h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo