自定义MembershipProvider的初始化方法

9
在重写MembershipProvider并直接调用它时,有一种方法可以填充Initialize方法的NameValueCollection config参数,而无需手动查找设置吗?
显然,这个Initialize是由asp.net调用的,并且配置正在某个地方被填充。我已经实现了自己的MembershipProvider,并且通过内置控件正常工作。
我想创建我的提供程序的新实例并直接调用它,但我不想解析MembershipProvider的.config文件,它的连接字符串名字以及连接字符串(如果已经在某个地方执行该操作)。
3个回答

21

tvanfosson- 感谢您的帮助。(如果我有足够的15分,我会投票支持您)

通过您的链接,我能够弄清楚这个问题。原来Initialize过程的第二个参数是提供程序的参数列表,可以通过以下方式访问:

string configPath = "~/web.config";
Configuration config = WebConfigurationManager.OpenWebConfiguration(configPath);
MembershipSection section = (MembershipSection)config.GetSection("system.web/membership");
ProviderSettingsCollection settings = section.Providers;
NameValueCollection membershipParams = settings[section.DefaultProvider].Parameters;
Initialize(section.DefaultProvider, membershipParams);

7

不确定为什么您想创建一个新的,但如果您自己创建它,您需要读取 web.config 并自己获取值传递给 Initialize(),因为这是在类外部完成的。不过,我相信已经有一个用于此部分的部分处理程序,所以只需要执行以下操作:

MembershipSection section  = WebConfigurationManager.GetSection("membership");

然后找到您的提供程序并访问其属性以构建NameValueCollection。我认为您不需要编写任何代码来解析配置部分。

这是MSDN上MembershipSection文档。从那里深入了解。


1
我尝试了这个,但是部分为空。我查看了WebConfigurationManager,但我只有AppSettings和ConnectionStrings。会员资格为什么没有显示?我在web.config中看到它了吗? - JHORN

0
无论如何,您都不应该创建MembershipProvider的实例。它是由标准的asp.net基础结构创建和初始化的。您可以通过以下代码访问它:
var customerMembership = Membership.Provider;

这对我有用!这是确保您的可重写初始化函数运行的唯一方法。 - JeffJeffery

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接