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 :

Injection de dépendance, AOP dynamique


Sujet :

Dotnet

  1. #1
    Membre expérimenté Avatar de davcha
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 258
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 258
    Points : 1 539
    Points
    1 539
    Par défaut Injection de dépendance, AOP dynamique
    Bonjour,
    J'ai besoin d'injecter du code, lors de l'exécution dans/autour des méthodes de différentes classes.

    Par exemple :
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    public interface IService
    {
    	int Random(int maxValue);
    	void DisplayText(string text);
    	void DisplayRandom(int max);
    }
     
    public class Service : IService
    {
    	Random r = new Random();
     
    	public int Random(int maxValue) { return r.Next(maxValue); }
    	public void DisplayText(string text) { Console.WriteLine(text); }
    	public void DisplayRandom(int max) { DisplayText(Random(max).ToString()); }
    }
    J'ai un hôte qui est en mesure de générer un proxy à partir d'une interface et d'une implémentation qu'il est également en mesure de sélectionner, via une configuration quelconque.

    Le proxy peut être configuré pour réaliser diverses opérations, comme tracer les entrées/sorties des méthodes.

    A partir de là, des choses comme suit sont possibles :
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Host host = new Host();
    IService service = host.GetService<IService>();
    service.DisplayRandom(100);

    Si le proxy est configuré pour annoncer sur la sortie standard "calling methodname" et "methodname done" à chaque appel de méthode, alors, l'exemple précédent affichera (par exemple) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    calling DisplayRandom
    84
    DisplayRandom done
    Cela est dû au fait que le proxy est actuellement implémenté comme une classe abstraite ServiceProxy implémentant l'interface IService grâce à une composition. Autrement dit, une instance de Service est stockée dans le proxy.
    Chaque méthode du proxy est décorée avec diverses choses (ici, l'affichage de la trace sur la sortie standard).

    Seulement, voilà le souci, DisplayRandom fait appel à DisplayText et Random. Et j'aimerais que l'indirection se fasse également à ce niveau là, de façon transparente.
    Autrement dit, l'exemple précédent devrait afficher :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    calling DisplayRandom
    calling Random
    Random done
    calling DisplayText
    84
    DisplayText done
    DisplayRandom done
    Des idées ? Des questions ?

    Merci.

  2. #2
    Membre expérimenté Avatar de davcha
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 258
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 258
    Points : 1 539
    Points
    1 539
    Par défaut
    Je fais "joujou" avec System.Reflection.Emit pour lire le corps des méthodes et le modifier, si besoin est. Puis le réécrire dans un nouveau type.

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 19/09/2011, 20h37
  2. [EJB3] [JBoss] Injection de dépendance circulaire ?
    Par Claythest dans le forum Java EE
    Réponses: 6
    Dernier message: 04/08/2009, 08h11
  3. [EJB3] Injection de dépendance et Stateful
    Par newbeewan dans le forum Java EE
    Réponses: 1
    Dernier message: 15/05/2007, 07h33
  4. [Integration] [EasyMock] Injection de dépendance à l'éxécution
    Par frangin2003 dans le forum Spring
    Réponses: 2
    Dernier message: 06/03/2007, 11h06
  5. Spring + TagSupport et injection de dépendance
    Par worldchampion57 dans le forum Spring Web
    Réponses: 2
    Dernier message: 26/02/2007, 09h01

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