Пользовательский метод MembershipProvider Initialize
-
04-07-2019 - |
Вопрос
При переопределении 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; Р>