Получить Свойства MembershipProvider от Web.Config - PullRequest
0 голосов
/ 27 мая 2009

Я вывел класс из MembershipProvider в System.Web.Security со следующим определением:

   public class RedditMembershipProvider : MembershipProvider
    {

        public RedditMembershipProvider()
        {

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

Проблема в том, что я хочу, чтобы при создании экземпляра RedditMembershipProvider я хотел, чтобы все свойства читались из файла web.config, а не из определения кода выше:

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

Поэтому, когда я вызываю PasswordAttemptWindow с точки зрения, я должен получить 20, а не 10. Но теперь я получаю 10, а не 20.

Есть идеи, как решить эту проблему?

Ответы [ 3 ]

1 голос
/ 27 мая 2009
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;
        }
    }

    ...
}

Редактировать: опечатка.

0 голосов
/ 01 сентября 2012

Ответ 1 - элегантный способ. Например, чтобы прочитать свойство minRequiredPasswordLength используйте

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);
}

, а затем

public override int MinRequiredPasswordLength {
    get { return _minRequiredPasswordLength; }
}
0 голосов
/ 27 мая 2009

Глупый я! Как я могу сделать такую ​​ошибку?

Мне просто нужно прочитать web.config в моем коде, чтобы получить значение

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

Еще более простой способ - наследовать RedditMembershipProvider от SqlMembershipProvider и переопределять только необходимые детали.

...