Je suis curieux de savoir si .NET prend en charge toute forme d'interception dynamique d'appels de méthode (ou d'invocations de propriétés) au moment de l'exécution. Autrement dit, pouvez-vous intercepter un appel à un objet sans informations de compilation statiques telles qu'une interface (le long des lignes de CORBA DII (link text) ou IDispatch de COM). Si ce n'est pas le cas, la nouvelle fonction 'Dynamically Typed Objects' dans C# 4.0 est-elle utile à cet égard?Interception dynamique d'appels dans .NET
Répondre
Il n'y a rien d'intégré qui vous permette d'intercepter un objet dont vous ne pouvez pas contrôler l'instanciation. De même, il n'y aura pas de nouvelles installations pour cela dans le prochain .net 4.0.
Si vous pouvez contrôler instanciation:
- Si votre objet peut être MarshalByRef vous pouvez utiliser RealProxy.
- Vous pouvez utiliser un certain nombre de conteneurs IOC, par ex. LinFu, Castle Dynamic Proxy
- Vous pouvez utiliser un outil comme PostSharp, Mono Cecil ou Microsoft CCI de réécrire vos assemblées avec les interceptions comme une étape de post de compilation.
Si vous ne pouvez pas contrôler instanciation
- Vous pouvez utiliser ICorDebug - les API de débogage .Net qui sont vraiment difficiles à utiliser et lourd.
- Vous pouvez utiliser ICorProfiler - les API de profilage .Net sont également très compliquées à utiliser.
Sinon, vous pouvez regarder un langage dynamique comme IronRuby, qui a intégré dans la bonté alias_method
et define_method
(ce qui vous permet de tout redéfinissez), de sorte que l'interception cuit dans.
. NET 4.5 introduit une méthode à ReJIT méthodes qui fournit un autre crochet pour l'interception de méthode (à condition que vous n'exécutez pas un GC concurrent/bg et la méthode n'est pas inline)
Vous pouvez également utiliser RealProxy si vous utilisez une interface. – kyoryu
Je pense que 'Castle Dynamic Proxy' semble mieux correspondre à ce que je cherche. C'est API est gentil et simple. – karmasponge
Bonnes choses. Une chose à ajouter - Mono.Cecil a des chevauchements avec PostSharp. –
Consultez le Policy Injection Application Block dans Enterprise Library.
Découvrez les objets dynamiques .net 4.0 ... Cela peut fais le.
http://www.ontheblog.net/CMS/Home/tabid/36/EntryID/77/Default.aspx
- 1. Interception et exceptions de l'unité
- 2. fenêtre parent accélérateur interception
- 3. Interception ASP.NET Control OnInit
- 4. Interception de XHR
- 5. UINavigationController interception - popViewControllerAnimated:
- 6. Webservice C# .NET dynamique
- 7. Renommer CSS dynamique et redéfinir dans .Net
- 8. Initialisation de classe dynamique dans .NET
- 9. interception et l'unité des constructeurs
- 10. Intégration de bureau (Word) - interception de sauvegarde
- 11. C# Nom d'objet dynamique .NET
- 12. Répéteur dynamique en C# .net
- 13. Interception de l'application close in C#
- 14. Interception Copier et coller avec AppleScript
- 15. Interception de tous les chemins relatifs
- 16. .NET 4.0 - Le mot-clé "dynamique"
- 17. Énumération dynamique de valeurs pour une propriété dans .Net
- 18. Création dynamique de chemins de fichier dans .Net
- 19. Vérification de l'adresse IP statique ou dynamique dans C# .NET?
- 20. Tableau croisé dynamique dans C#
- 21. Interception de la touche Nokia Ctrl/Chr en appuyant sur
- 22. Querystring dynamique dans JRXML
- 23. dropdownlist dynamique dans asp.net
- 24. requête dynamique dans LINQ
- 25. Sélection dynamique dans LINQ
- 26. Contrôle dynamique dans C#
- 27. ASP .NET: contrôles de charge dynamique vs Visible = true
- 28. Comment savoir si un assembly .NET est dynamique?
- 29. Configuration dynamique du client .NET via le socket
- 30. Dynamique créé dynamique RadioButtonsList
fortement liée: http://stackoverflow.com/questions/25803/how-do-i-intercept-a-method-call-in-c –
est-il étroitement lié? Je n'ai aucune classe à laquelle je peux ajouter des attributs. – karmasponge
J'étudie actuellement le 'RealProxy' et le 'Bloc d'Application d'Injection de Profil'. – karmasponge