2008-10-24 128 views
9

当重写MembershipProvider并直接调用它时,是否有办法填充Initialize方法的NameValueCollection配置参数,而无需手动查看配置文件中的设置?自定义MembershipProvider初始化方法

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

回答

20

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

从你的链接我能弄明白。事实证明,以初始化proceedure第二个参数是从提供的参数列表,并可以通过以下方式来达到:

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); 
+4

你现在有这15点需要:) – Abel 2010-08-24 18:07:55

7

不知道你为什么要创建一个新的,但如果你自己创建它,你需要阅读web配置并自己将值传递给Initialize(),因为这是在类之外完成的。我敢肯定,虽然,已经有本节一节处理程序,因此应该只是做的事:

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

然后找到你的供应商和访问它的属性来构建的NameValueCollection。我不认为你将不得不编写任何代码来解析配置部分。

这是MSDN上的MembershipSection文档。从那里钻出来。

+1

我试过了,部分为空。我查看了WebConfigurationManager,而我所拥有的仅仅是AppSettings和ConnectionStrings。会员没有出现的原因吗?我在web.config中看到它? – JHORN 2008-10-24 17:09:25

0

在你不应该创建的MembershipProvider实例任何情况。它是由标准的asp.net基础设施创建和初始化的。你可以通过这样的代码访问它:

var customerMembership = Membership.Provider;

+0

这对我有效!并且它是确保您的可覆盖的初始化函数运行的唯一方法。 – JeffJeffery 2016-03-07 20:27:17