我从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>
所以当我从View中调用PasswordAttemptWindow
时,我应该得到20,而不是10.但是现在我得到的是10,而不是20。
知道如何解决这个问题吗?
答案 0 :(得分: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;
}
}
...
}
编辑:拼写错误。
答案 1 :(得分:0)
我只需要在我的代码中读取web.config以获取值
public override int PasswordAttemptWindow
{
get { ConfigurationManager.AppSettings["membership"].value; }
}
更简单的方法是从RedditMembershipProvider
继承SqlMembershipProvider
并仅覆盖必要的详细信息。
答案 2 :(得分: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; }
}