2009-05-27 19 views
-1

獲取的MembershipProvider的屬性我來源於MembershipProvider一類System.Web.Security如下定義:從Web.Config中

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

任何想法如何解決這個問題?

回答

0

傻我!我怎麼能犯這種錯誤?

我只需要在我的代碼讀取web.config中獲得的價值了

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

一個更簡單的方法是繼承SqlMembershipProviderRedditMembershipProvider和只覆蓋必要的細節。

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

    ... 
} 

編輯:打字錯誤。

0

答案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; } 
}