9

当覆盖 MembershipProvider 并直接调用它时,有没有办法填充 Initialize 方法的 NameValueCollection 配置参数,而无需手动查看配置文件进行设置?

显然,这个 Initialize 正在被 asp.net 调用,并且配置正在某个地方填充。我已经实现了自己的 MembershipProvider,它通过内置控件运行良好。我想创建我的提供程序的一个新实例并直接调用它,但我真的不想解析 MembershipProvider 的 .config,它是连接字符串名称,然后是连接字符串(如果它已经在某处完成) .

4

3 回答 3

21

tvanfosson-感谢您的帮助。(如果我有必要的 15 分,我会投票给你)

从您的链接中,我能够弄清楚。事实证明,初始化过程的第二个参数是来自提供者的参数列表,可以通过以下方式访问:

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);
于 2008-10-24T21:10:19.117 回答
7

不知道为什么要创建一个新的,但如果你自己创建它,你需要阅读网络配置并自己获取值以传递给 Initialize() 因为这是在类之外完成的。不过,我敢肯定,该部分已经有一个部分处理程序,因此只需要做以下事情:

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

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

这是 MSDN 上的MembershipSection文档。从那里向下钻取。

于 2008-10-24T16:44:51.977 回答
0

在任何情况下,您都不应该创建 MembershipProvider 的实例。它通过标准的 asp.net 基础结构创建和初始化。您可以通过如下代码访问它:

var customerMembership = Membership.Provider;

于 2014-01-27T01:13:26.223 回答