2017-08-01 2 views
1

App.ConfigPourquoi la valeur ne reflètent pas la dans la couche de service

<appSettings> 
    <add key="maxDiscount" value="25"/> 
</appSettings> 

Ceci est mon CustomerConfig.cs

public class CustomerConfig 
    { 
    private static int GetValue(string key) 
    { 
     return Convert.ToInt16(ConfigurationManager.AppSettings[key]); 
    } 

    public static int MaxDiscount 
    { 
     get 
     { 
      return GetValue("maxDiscount"); 
     } 
    } 

classe de service

public class CustomerService : ICustomer 
{ 
    private readonly int _maxDiscount; 

    public CustomerService() 
    { 
     //the value is NOT reflecting here 
     _maxDiscount = CustomerConfig.MaxDiscount; 
     //watching at this line I see _maxDiscount = 0 
    } 
} 

Note: - Toutes ces classes ci-dessus sont dans la même couche (Class Librar y project) Alors que le contrôleur ci-dessous se trouve dans une autre couche (couche UI)

Contrôleur MVC. Pourquoi la valeur de maxDiscount n'est pas reflétée dans la couche de service?

public class SomeController : Controller 
{ 
private readonly int _maxDiscount; 
public SomeController() 
     : base() 
    { 
     //here the value 25 is reflecting 
     _maxDiscount = CustomerConfig.MaxDiscount; 
    } 
} 

Quelle est la cause de ce & comment puis-je récupérer la valeur dans la couche de service?

+2

Classe de service et partie de classe CustomConfig du même projet? Où se trouve app.config? N'êtes-vous pas capable d'obtenir la valeur configurée dans web.config? –

+0

@ChetanRanpariya La classe de service, CustomConfig et App.Config font tous partie du même projet alors que SomeController est une autre couche (couche d'interface utilisateur) –

Répondre

1

ConfigurationManager chargera la configuration à partir du fichier de configuration de l'assembly en cours d'exécution. Dans votre scénario, ce sera le fichier web.config. Si vous voulez que cela fonctionne, vous devez ajouter ce paramètre dans votre fichier web.config ou, vous voulez vraiment aller de cette façon, vous pouvez essayer d'utiliser ConfigurationManager.OpenExeConfiguration Method mais je ne sais pas si c'est une bonne idée (ou si cela fonctionne avec dlls). Qu'est-ce que cela veut dire «valeur ne reflétant pas»?

+1

Oui.juste, vos affirmations semblent vraies. Je vous remercie :) –