Ciao a tutti
ho fatto alcune prove ed ho quasi finito il custom membershipprovider.
Volevo solo dire che alla domanda
All'interno del della classe astratta come faccio ad istanziare la classe concreta? Passo per il web.config e l'Activator.CreateInstance?
Mi rispondo da solo e dico....
"MA COSA STO DICENDO"?
Infatti crearsi una sezione del web.config personalizzata ed utilizzare la creazione di un istanza con l'activator non serve a nulla poichè ci pensa direttamente il framework
Ecco un piccolo esempio di cio che ho fatto:
ho creato il MembershipUser custom (che eredita il System.Web.Security.MembershipUser) con una proprietà aggiuntiva che è il suo ID:
public class EpsMembershipUser: System.Web.Security.MembershipUser
{
#region Members
private int _id;
#endregion
#region Properties
public int ID
{
get { return _id; }
set { __id= value; }
}
#endregion
#region Ctor
public EpsMembershipUser(string providername,
string username,
object providerUserKey,
string email,
string passwordQuestion,
string comment,
bool isApproved,
bool isLockedOut,
DateTime creationDate,
DateTime lastLoginDate,
DateTime lastActivityDate,
DateTime lastPasswordChangedDate,
DateTime lastLockedOutDate,
int id)
: base(providername,
username,
providerUserKey,
email,
passwordQuestion,
comment,
isApproved,
isLockedOut,
creationDate,
lastLoginDate,
lastActivityDate,
lastPasswordChangedDate,
lastLockedOutDate)
{
this.ID= id;
}
#endregion
}
poi ho creato la mi classe base del MembershipProvider (che eredita il System.Web.Security.MembershipProvider) con un metodo astratto che mi permette di recuperare un utente tramite il suo id:
public abstract class EpsMembershipProvider: System.Web.Security.MembershipProvider
{
public abstract MembershipUser GetUser(int userId);
}
poi ho creato la classe concreta del provider che eredita dal mio EpsMembershipProvider ed implementa il metodo astratto:
public sealed class EpsSqlMembershipProvider: EpsMembershipProvider
{
//Implementazione di tutti i metodi astratti del MembershipProvider
................................
................................
//Implementazione del metodo astratto GetUser del mio Provider base
public override MembershipUser GetUser(int userId)
{
//Recupero del membership dal DB
.......................
.......................
//Istanza del EpsMembershipUser
EpsMembershipUser user = new EpsMembershipUser();
//Valorizzazione di user
.......................
return user
}
}
La classe sopra appena finita la convertirò per funzionare anche con MySql visto che la mia esigenza è quella di avere un indipendenza dal DB
in fine ho messo nel web.config sotto la sezione Membership il mio provider per Sql
<membership defaultProvider="EpsMembershipProvider">
<providers>
<clear/>
<add name="EpsMembershipProvider" type="Eps.Web.Security.EpsSqlMembershipProvider, Eps.SqlMembershipProvider" connectionStringName="EpsTest"/>
</providers>
</membership>
A questo punto nella mia pagina ASPX non ho fatto altro che fare questo:
//Faccio il casting del provider restituito dal Membership del framework al
//mio provider astratto
Eps.Web.Security.EpsMembershipProvider provider =
(Eps.Web.Security.EpsMembershipProvider)Membership.Provider;
//Istanzio il MembershipUser custom e richiamo il metodo GetUser(int id) del mio
//provider
Eps.Web.Security.EpsMembershipUser user =
(Eps.Web.Security.EpsMembershipUser)provider.GetUser(67543);
//Utilizzo la variabile personalizzata del mio EpsMembershipUser
lblUserID.Text = user.ID.ToString();
A questo punto è tutto fatto....io sono contento e spero che sia stato di aiuto a qualcun'altro :) :)