IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

Surcharger une Fonction du ProfileProvider


Sujet :

ASP.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut Surcharger une Fonction du ProfileProvider
    LuteceFlaco m'ayant donné la bonne voie pour faire mon truc, je me lance pour voir comment ça marche.

    Donc j'ai surchargé un ProfileProvider en faisant une nouvelle classe avec l'implémentation des classes abstraites.

    La strucuture donne ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Imports Microsoft.VisualBasic
     
    Namespace MonProjet
    Public Class MonProfileProvider
    'plein de Function et de Property
    End Class
    End Namespace
    Maintenant je voudrais m'accrocher sur une fonction en particulier : GetPropertyValues mais je trouve pas le code de base de cette fonction et je ne sais pas trop comemnt elle marche.
    Voici le code que j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Public Overrides Function GetPropertyValues(ByVal context As System.Configuration.SettingsContext, ByVal collection As System.Configuration.SettingsPropertyCollection) As System.Configuration.SettingsPropertyValueCollection
     
    End Function
    Si j'ai bien compris le peu de doc que j'ai trouvé c'est celle lmà qui permet de récupérer les propriétés du Profil, genre, quand on fait un
    On obtient le login du gars qui es connecté.

    Ce que je voudrais c'est rajouter une propriété (disons Bidule) et pouvoir un :
    et que ça me donne un truc, enfin une chaine de caractère.
    Mon soucis c'est que je ne sais pas comment faire, mais alors pas du tout.

    Pouvez vous m'orienter ?

  2. #2
    Membre chevronné Avatar de predalpha
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    392
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 392
    Par défaut
    Salut Zoofy,

    voici un exemple de code que tu pourras utiliser pour ta classe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    Public Class Medicament
     
     
     
    'Variable privée (Attribut) servant à stocké en interne le nom.
     
    Private _mNom As String
     
     
     
    'Propriété Nom
     
    Public Property Nom() as String
    Get  
        Return _mNom
    End Get
    Set(By Val Value)
        _mNom=value
    End Set
     
    End Property
     
     
     
    End Class

    Ce code est tiré des tutoriaux de Plasserre (très bon d'ailleurs).
    http://plasserre.developpez.com/v5-2.htm

    Ainsi dans cet exemple tu pourras obtenir Medicament.nom.

    Sinon pour plus simple mais moins propore dans la conception objet, tu pourrais déclarer public la variable _mNom ainsi tu n'as pas besoin de la propriété nom pour accéder à la valeur. Tu pourrais du coup faire directement medicament._mNom.

    Je te conseille vivement le site de plasserre. Vraiment très pratique au niveau des ressources même s'il n'est pas complété d'aspnet.

  3. #3
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut
    Merci PredAlpha

    En fait, l'ajout de la propriété, j'avais déjà fait.
    Mais, à force de lutter, j'ai fini par trouver un truc qui me perturbe beaucoup plus.

    Je pense que cela vient du fonctionnement global du MemberShip. Donc, je vais faire une sorte d'analyse.

    Pour gérer le Profile, il y a le ProfileManager et le ProfileProvider. Visiblement on peut surcharger le ProfileProvider, mais pas le ProfileManager.

    Pour obtenir le Profile.UserName on passer le ProfileManager, amis c'est le ProfileProvider qui lui fourni la donnée contenue. Pour faire un Profile.mNom (pour reprendre ton exemple) il faut d'abords que la donnée soit accèssible dans le ProfileManger et je crois que c'est la fonction GetPropertyValues qui permet de faire ça.

    Donc mon souci se trouve véritablement sur la rédaction de la fonction, plutôt que sur l'établissement d'une propriété nouvelle.
    Mais, malgré mes recherches assidues, je ne trouve toujours pas comment cette fonction travaille our enrichir ou aller chercher les données.

    Et donc, c'est sur ce point précis que j'ai besoins d'aide.

  4. #4
    Membre chevronné Avatar de predalpha
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    392
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 392
    Par défaut
    Pour info, regardes du côté de l'explorateur d'objets dans VS2005, tu devrais retrouver tes petits.
    Affichage --> Explorateur d'objets

    Le username, il semblerait que le profileinfo le donne aussi. Le tout est de savoir à quel moment tu as besoin de l'info et pourquoi ?

  5. #5
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut
    Merci pour ton aide.

    J'ai régardé dans l'explorateurs d'objet, mais il n'y apas de code. Et même plus, il n'y pas la fonction dont j'ai besoins.

    Oui, le ProfileInfo le donne aussi, mais il se nourri également du ProfileProvdier.
    Donc le problème reste entier : comment ajouter une nouvelle propriété dans le ProfileProvider ?

    Vois tu ce que je veux dire ?

  6. #6
    Membre chevronné Avatar de predalpha
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    392
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 392
    Par défaut
    Arf, je ne sais pas si j'arrive bien à cerner ton pb, mais voilà ce que je te propose:

    Public Class MonProfileProvider
    Inherits ProfileProvider

    public nouveaumembre as integer

    'toutes tes surcharges de fonctions

    End Class

    A savoir : Seuls les membres 'Public' et 'Protected' de la classe mère sont accessibles à partir de la classe fille, il faut donc utiliser ces membres dans la classe fille. (Plasserre)

    Si tu veux avoir accès à ces membres ou propriétés, tu peux utiliser MyBase.elementpublicclassemere et du coup peut-être récupérer ton info.

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    En fait je pense que tu dois aussi créer une classe dérivée de ProfileInfo (MyProfileInfo par exemple), dans laquelle tu ajoutes les nouvelles propriétés dont tu as besoin. Et dans ta classe dérivée de ProfileProvider, tu dois renvoyer des instances de MyProfileInfo pour les fonctions qui retournent un ProfileInfo.

    Il y a dans la doc MSDN un article "Implementing a Profile Provider", je pense que ça devrait t'aider...

  8. #8
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut
    Merci, ça m'écliare un peu plus.

    @PredAlpha : ce n'est toujours pas ça qu'il me faut. C'est le code de la fonction qu'il me faut.

    @Tomlev : je vais aller potasse l'article que tu dis, peut être aurais je un embryon de solution.
    Mais tu pense qu'il faut vraiment surcharger les deux classes ?
    Parce que, dans ces cas là, ça irai à l'encontre du princip Objet fondamental. Si le ProfileInfo se nourri de ce que fourni le ProfilProvider, pourquoi en surcharger un lorsqu'on ne veut qu'un propriété de plus.

    J'ai du mal à suivre, mais j'en saurais peut être plus aprés la lecture.

  9. #9
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    J'ai du mal à suivre, mais j'en saurais peut être plus aprés la lecture.
    A vrai dire moi aussi :p
    Je n'ai jamais fait ça, tout ce que j'ai dit vient de la doc...

    Pour le ProfileInfo, je suis pas trop sûr de mon coup... je vois qu'il existe aussi une classe ProfileBase, qui ne semble pas liée à ProfileInfo, donc je sais plus trop laquelle il faut utiliser...
    En tous cas ProfileBase propose des méthodes GetPropertyValue et SetPropertyValue, donc en fait tu n'as pas forcément besoin de dériver de ProfileBase. Le seul intérêt serait de créer des propriétés pour masquer les appels à GetPropertyValue et SetPropertyValue.

    D'ailleurs en regardant la doc sur ProfileBase, j'ai l'impression que tu peux ajouter des propriétés en utilisant un provider standard, juste en changeant la conf:
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    <configuration>
      <connectionStrings>
        <add name="SqlServices" connectionString=
          "Data Source=localhost;Integrated Security=SSPI;Initial Catalog=aspnetdb;" />
      </connectionStrings>
     
      <system.web>
        <anonymousIdentification enabled="true" />
     
        <profile enabled="true" defaultProvider="SqlProvider" >
          <providers>
            <add
              name="SqlProvider"
              connectionStringName="SqlServices"
              applicationName="ProfileBaseApplication"
              type="System.Web.Profile.SqlProfileProvider" />
          </providers>
     
          <properties>
            <add name="ZipCode" allowAnonymous="true" />
            <add name="RecentSearchList"
              type="System.Collections.Specialized.StringCollection"
              serializeAs="Xml"
              allowAnonymous="true" />
          </properties>
        </profile>
      </system.web>
    </configuration>

    Donc en fait c'est peut-être ça la meilleure solution...

    Bon, j'espère que je ne t'ai pas encore plus embrouillé avec ce post un peu bordélique

    Bon courage

  10. #10
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut
    Merci tomlev.
    Bon, j'ai pas eu le temps de me plonger dans la doc, j'ai eu un bug à corriger hier. Et c'est aps aujourd'hui que je vais y arriver non plus.

    Ce que tu présente là, je connais aussi. En fait, c'est le principe pour rajouter des inforamtions dans le MemberShip de chaque User. ça se gère trés bien et ça permet de récupére plein de chose en intégratin avec le MemberShip.
    L'ennui c'est que cela ne s'adapte pas à mon cas car je gère les info du membre dans une table séparée, avec un formulaire distinct.

    Donc, l'idée de la surcharge reste la bonne, il ne faut plus que voir comment rajouter des choses dedans. Parce que, la surcharge pourrait aussi servir à faire uatre chose que récupérer des données sur le mebre. Par exemple, je pourrais rajouter une Function ou une Sub pour gérer un Log des passages du membre.

    Bon, dés que j'ai lu la doc je reviens en discuter.

Discussions similaires

  1. Surchargé une fonction template avec template
    Par SKone dans le forum Langage
    Réponses: 2
    Dernier message: 12/10/2014, 20h00
  2. Comment "surcharger" une fonction "statique" ?
    Par ZZZzzz2 dans le forum Langage
    Réponses: 5
    Dernier message: 09/07/2012, 17h39
  3. Surcharger une fonction virtuelle
    Par pierreJTL dans le forum Débuter
    Réponses: 3
    Dernier message: 18/06/2012, 14h44
  4. [2.x] Surcharger une fonction Twig dans un autre bundle
    Par kokoro62 dans le forum Symfony
    Réponses: 0
    Dernier message: 12/06/2012, 16h06
  5. Surcharger une fonction
    Par soso78 dans le forum VB.NET
    Réponses: 5
    Dernier message: 24/09/2008, 12h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo