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

Dotnet Discussion :

Code et traçabilité.


Sujet :

Dotnet

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 103
    Par défaut Code et traçabilité.
    Bonjour,

    Dans le cadre d'une application, dans certaines classes, je souhaite vérifier la présence d'attributs spécifiques sur l'appelant du code.

    Je m'explique... J'ai une classe A avec une méthode public alpha().
    Cette méthode peut etre appelée depuis plusieurs classes, B, C, D...
    chaque classe qui l'appelle est suceptible de porter des Attributs spécifiques.

    Ce qui m'intéresse c'est au niveau de A.alpha() récupéré au moment de l'exécution, quelle classe et a priori quelle méthode, a fait cet appel, pour pouvoir extraire les attributs custom de cette classe/méthode. (en gros je veux tracer l'appelant... pour vérifier qui a fait cet appel... ca me sert également à déterminer quelle confiance je peux accorder aux données fournie à A.alpha.. et le mettre en internal ne règlerais pas mon problème)

  2. #2
    Membre confirmé
    Inscrit en
    Juillet 2004
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 72
    Par défaut je pense
    Tu envoie une référence sur l'appelant dans ton appel et tu test si il est de tel ou tel type après tu fais ton traitement.

    ex dans B tu fais A.alpha(this, args);

    Je crois meme qu'il y a une fonction en dotnet pour récuperer dans quel bloc tu te trouve donc tu envoi aussi l'info de la fonction en question.

    a voir dans le System.Runtime

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 103
    Par défaut
    oui ce serait une solution, mais c'est pas tellement le but

    car je peux pas forcément avoir confiance dans le développeur qui peut choisir de mettre une référence d'une instance systeme qui elle a un niveau d'approbation maximale.

    quand on développe une api, framework, on ne doit pas partir du principe qu'on peut faire confiance au developpeur final, car s'il y a une connerie à faire, tu peux etre sure qu'il la fera...
    je le sais, j'ai été dans le cas, une développeur a utiliser le framework et la première chose qu'il a faite, c'est justement ce qu'il ne devait pas faire...

    je dois vraiment traquer l'appelant automatiquement sans avoir à faire appel à la responsabilité du développeur

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 103
    Par défaut
    Bon alors au fil de mes recherches dans la doc du framework, j'ai fini par trouver un début de solution.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public string Environment.StackTrace { get; }
    Permet de récupèrer la trace de la pile d'exécution.
    une fois la quatrième ligne récupérée et correctement parsée, il y a moyen de récupèrer le nom (namespace compris) du type responsable de l'appel.
    A partir de là grâce au mécanisme de reflexion on peut facilement obtenir le type de l'objet dont on à le nom complet, et de là extraire les informations que l'on souhaite dessus (les attributs prédéfinis et custom)

    Si toutefois quelqu'un voie une solution plus simple et plus efficace, je reste ouvert, toute proposition, surtout d'une solution ne mettant pas en cause du parsing de chaine qui peut d'une langue à l'autre changer complètement.

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 103
    Par défaut
    Si ca intéresse quelqu'un j'ai encore trouvé beaucoup mieux

    et oui, en cherchant pas mal,

    Dans "System.Diagnostics" on trouve une classe StackTrace collection de StackFrame, et cette classe StackTrace permet d'obtenir l'état de la pile d'appel au moment où on lui demande.

    Ainsi, le premier élément que l'on sort de la pile d'appel c'est le code où stackstrace est instancié, au niveau juste en dessous, la méthode appelante, de là on peut extraire le type d'où sort la méthode et donc en extraire les attributs

    Voila fini par trouver une solution qui permet de ne pas faire une confiance aveugle dans la responsabilité des developpeurs générallements irresponsables...

    Merci à tous.

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 652
    Par défaut
    Jouer avec StackTrace est très lent cela dit.
    Tu peux aussi jeter un oeil du côté des attributs de sécurité dans System.Security.Permissions. C'est fait pour ce genre de choses à la base.


    Après, Murphy oblige, tu peux blinder autant que tu veux mais tu tomberas toujours sur un boulet qui te cassera tout :)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. De la rapidité du code
    Par jfloviou dans le forum Contribuez
    Réponses: 233
    Dernier message: 29/05/2009, 03h17
  2. code pour interbase 6.0 et 6.5 de generateur
    Par tripper.dim dans le forum InterBase
    Réponses: 4
    Dernier message: 01/07/2002, 12h29
  3. [MFC](encapsulation ADO) ou placer le code
    Par philippe V dans le forum MFC
    Réponses: 2
    Dernier message: 13/06/2002, 15h58
  4. Explorateur de code C
    Par Zero dans le forum C
    Réponses: 14
    Dernier message: 06/06/2002, 10h41
  5. OmniORB : code sous Windows et Linux
    Par debug dans le forum CORBA
    Réponses: 2
    Dernier message: 30/04/2002, 18h45

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