2010-11-22 2 views
3

Dans le sens le plus courant bien sûr "c'est une méthode pour influencer le comportement d'un programme d'une manière que ses auteurs n'avaient pas l'intention" (wiki).Quelle est l'injection de code dans le .net (en tant que compétence de programmation)?

Ensuite, toutes les techniques de réflexion et de construction de types peuvent aussi être nommées avec "injection de code" mais personne ne le fait. Quand je pensais toujours que "l'injection de code" est quelque chose à propos de "runtime": comme démarrer un thread dans un autre processus pour obtenir des données intéressantes, j'ai surpris comment Reflexil comprend ceci: "convertir les instructions C# en IL sur time ', save assembly assemblé et remplace l'ancien assembly par new "(10% que je manque quelque chose). Alors, je suis intéressant de savoir quelles techniques dans le .NET sont nommés avec le terme «injection de code»?

BTW. Je suis curieux de savoir: est-il possible de remplacer un "pointeur vers la méthode virtuelle" dans la "table de méthode virtuelle" de très classe très privée, plusieurs fois imbriquée, avec un pointeur sur ma propre méthode au moment de l'exécution. L'injection de code pure de ma compréhension.

Répondre

4

L'injection de code dans .NET est assez difficile. Principalement parce que le code n'existe pas jusqu'au dernier moment possible. Une fraction de seconde avant l'exécution, générée par le compilateur JIT.

Les approches pratiques utilisent la réécriture IL, courante dans AOP par exemple. Cela se produit hors ligne, avant que le programme commence même à s'exécuter. Ce n'est plus vraiment une 'injection', vous changez physiquement le programme sur le disque.

Il existe une technique de réécriture IL en ligne, elle utilise les interfaces de profileur non managées. Assez impraticable, un article de magazine qui documente l'approche est available here. C'est assez daté, l'API du profileur a beaucoup changé depuis. Jamais entendu parler d'un outil qui utilise cela.

+0

super réponse. Merci beaucoup. –

1

La programmation orientée aspect (AOP) utilise l'injection de code pour intercepter les appels de méthode.

1

Quand j'entends "injection de code", j'ai tendance à supposer qu'ils parlent de Inversion of Control. Un bon exemple de ceci dans .Net est le cadre Ninject.

Questions connexes