2009-05-27 5 views
-1

Je tirais une classe de MembershipProvider en System.Web.Security avec la définition suivante:obtenir les propriétés de MembershipProvider de web.config

public class RedditMembershipProvider : MembershipProvider 
    { 

     public RedditMembershipProvider() 
     { 

     } 
     public override int PasswordAttemptWindow 
     { 
      get { return 10; } 
     } 
     /* snip all the similar properties definition 
       */ 
    } 

La question est que je veux quand le RedditMembershipProvider est instancié, je veux toutes les propriétés à lire à partir le web.config, pas de la définition du code ci-dessus:

<membership defaultProvider="RedditMembershipProvider"> 
<providers> 
<clear/> 
<add name="RedditMembershipProvider" 
    type="RedditClone.Models.RedditMembershipProvider" 
    PasswordAttemptWindow=20 
    /> 
</providers> 
</membership> 

Alors, quand je l'appelle PasswordAttemptWindow de la vue, je devrais obtenir 20, pas 10. Mais maintenant, je reçois 10, pas 20.

Une idée de comment résoudre ce problème?

Répondre

0

Silly moi! Comment puis-je faire ce genre d'erreur?

J'ai juste besoin de lire web.config dans mon code pour obtenir la valeur sur

public override int PasswordAttemptWindow 
    { 
     get { ConfigurationManager.AppSettings["membership"].value; } 
    } 

Une façon encore plus facile est d'hériter du RedditMembershipProvider de SqlMembershipProvider et passer outre les détails que nécessaires.

1
public class YourMembershipProvider : MembershipProvider 
{ 
    public override void Initialize(string name, NameValueCollection config) 
    { 
     if (!String.IsNullOrEmpty(config["yourValue"])) 
     { 
      _yourValue = config["yourValue"]; 
     } 

     base.Initialize(name, config); 
    } 

    string _yourValue; 
    public override string YourValue 
    { 
     get 
     { 
      return _yourValue; 
     } 
    } 

    ... 
} 

Édition: typo.

0

La réponse 1 est élégante. Par exemple, pour lire la propriété minRequiredPasswordLength utilisation

public override void Initialize(string name, System.Collections.Specialized.NameValueCollection config) { 
    if (!String.IsNullOrEmpty(config["minRequiredPasswordLength"])) { 
     _minRequiredPasswordLength = Int32.Parse(config["minRequiredPasswordLength"]); 
    } 
    base.Initialize(name, config); 
} 

puis

public override int MinRequiredPasswordLength { 
    get { return _minRequiredPasswordLength; } 
} 
Questions connexes