2008-10-24 19 views
9

Al reemplazar el MembershipProvider y llamarlo directamente, ¿hay alguna manera de completar el parámetro de configuración NameValueCollection del método Initialize sin buscar manualmente a través del archivo de configuración para la configuración?Metodología personalizadaProveedor Inicializar método

Obviamente, Initialize está siendo llamado por asp.net y la configuración se está llenando en algún lugar. Implementé mi propio MembershipProvider y funciona bien a través de los controles integrados. Me gustaría crear una nueva instancia de mi proveedor y hacer una llamada directamente, pero realmente no quiero analizar el .config para MembershipProvider, es el nombre de la cadena de conexión y luego la cadena de conexión si ya se está haciendo algun lado.

Respuesta

20

tvanfosson- Gracias por la ayuda. (si tuviera los 15 puntos necesarios, te votaría)

Desde tu enlace pude descifrarlo. Resulta que el segundo parámetro a la proceedure Inicializar era la lista de parámetros del proveedor y pudo ser contactado de la siguiente manera:

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

ahora tienes esos 15 puntos necesarios :) – Abel

7

No estoy seguro de por qué quiere crear uno nuevo, pero si lo crea usted mismo, necesitará leer la configuración web y obtener los valores para pasar a Initialize() ya que esto se hace fuera de la clase. Estoy seguro, sin embargo, que ya hay un controlador de sección de esta sección por lo que debe ser sólo una cuestión de hacer:

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

luego encontrar su proveedor y acceder a sus propiedades para construir el NameValueCollection. No creo que tenga que escribir ningún código para analizar la sección de configuración.

Aquí está la documentación MembershipSection en MSDN. Profundiza desde allí.

+1

Intenté esto y la sección es nula. Miré el WebConfigurationManager y todo lo que tengo es AppSettings y ConnectionStrings. ¿Hay algún motivo por el que la membresía no se muestre? Lo veo en la web.config? – JHORN

0

En cualquier caso, no debe crear instancia de MembershipProvider. Está creando e inicializando por la infraestructura asp.net estándar. Puede acceder a él por código como este:

var customerMembership = Membership.Provider;

+0

¡Esto funcionó para mí! y es la única forma de garantizar que se ejecuta su función de inicialización anulable. – JeffJeffery