Вопрос

При переопределении MembershipProvider и его непосредственном вызове, есть ли способ заполнить параметр конфигурации NameValueCollection метода Initialize, не просматривая файл конфигурации вручную для настроек?

Очевидно, что эта инициализация вызывается asp.net, и конфиг где-то заполняется. Я реализовал свой собственный MembershipProvider, и он прекрасно работает через встроенные элементы управления. Я хотел бы создать новый экземпляр моего провайдера и напрямую вызвать его, но я не хочу анализировать .config для MembershipProvider, это имя строки подключения и затем строка подключения, если это уже где-то выполняется .

Это было полезно?

Решение

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

Другие советы

Не уверен, почему вы хотите создать новый, но если вы создадите его самостоятельно, вам нужно будет прочитать веб-конфигурацию и получить значения, которые вы сами передадите в Initialize (), как это делается вне класса. Я уверен, однако, что для этого раздела уже есть обработчик раздела, так что это должно быть просто делом:

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

Затем найдите вашего провайдера и получите доступ к его свойствам для создания коллекции NameValueCollection. Я не думаю, что вам придется писать какой-либо код для разбора раздела конфигурации.

Вот документация MembershipSection по адресу MSDN. Развернуть оттуда.

В любом случае вы не должны создавать экземпляр MembershipProvider. Он создается и инициализируется стандартной инфраструктурой asp.net. Вы можете получить к нему доступ с помощью следующего кода:

var customerMembership = Membership.Provider;

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top