質問

MembershipProviderをオーバーライドして直接呼び出すとき、設定の構成ファイルを手動で調べることなく、InitializeメソッドのNameValueCollection構成パラメーターを設定する方法はありますか?

明らかに、この初期化はasp.netによって呼び出され、構成はどこかに書き込まれます。独自のMembershipProviderを実装しましたが、ビルドインコントロールを介して正常に機能します。 プロバイダーの新しいインスタンスを作成して直接呼び出したいのですが、MembershipProviderの.configを解析したくありません。接続文字列名であり、既にどこかで行われている場合は接続文字列です。

役に立ちましたか?

解決

tvanfosson-助けてくれてありがとう。 (必要な15ポイントがあれば、投票します)

あなたのリンクから、私はそれを理解することができました。 Initialize手順の2番目のパラメーターはプロバイダーからのパラメーターのリストであり、次の方法で到達できることがわかりました。

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

他のヒント

なぜ新しいものを作成したいのかはわかりませんが、自分で作成する場合は、Web構成を読み取り、値を取得してInitialize()に渡す必要があります。これはクラス外で行われます。ただし、このセクションのセクションハンドラーは既に存在しているので、実行するだけでよいはずです。

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

次に、プロバイダを見つけ、そのプロパティにアクセスしてNameValueCollectionを構築します。構成セクションを解析するためにコードを記述する必要はないと思います。

MembershipSection のドキュメントは次のとおりです。 MSDN。そこからドリルダウンします。

In any case you shouldn't create instance of MembershipProvider. It is creating and initializating by standard asp.net infrastructure. You can access to it by code like this one:

var customerMembership = Membership.Provider;

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top