Quiero agregar cierto comportamiento a una cierta clase en tiempo de ejecución. Sé cómo subclasificar en tiempo de ejecución usando Reflection.Emit, pero eso no es suficiente, dependiendo de alguna configuración externa, necesito inyectar códigos de operación en un método en un tipo T para que todas las clases que hereden de él ganen automáticamente este comportamiento. (No puedo usar el .NET Profiling API)¿Puede Mono.Cecil modificar el código ya cargado en el dominio de la aplicación?
¿Se puede hacer algo como esto con Mono.Cecil?
Si no es posible modificar el código en un conjunto cargado, está bien si puedo hacer las modificaciones antes de cargar el ensamblaje y luego cargar el ensamblaje modificado en la memoria, pero no sé cómo puedo controlar la carga del ensamblaje.
¿Está preguntando porque quiere optimizar el código? ¿Está abierto a la idea del muestreo como alternativa a la instrumentación? Mucha gente cree en la instrumentación porque es "precisa", que no es lo que necesita para la optimización. Si desea optimizar, considere este método: http://stackoverflow.com/questions/375913/what-can-i-use-to-profile-c-code-in-linux/378024#378024 –
No es la optimización Estoy buscando, lo que quiero es agregar algún comportamiento a un marco basado en la configuración. Por ejemplo, tome el mecanismo de inspección TypeDescriptor, si leo alguna configuración y agrego alguna propiedad pública a una clase base T, entonces quien inspeccione T o cualquiera de sus subclases utilizando el mecanismo TypeDescriptor verá la propiedad, pero si se realiza la misma inspección utilizando la reflexión, la propiedad se perderá. Eso es porque el Tipo no se modifica realmente, la propiedad simplemente se agrega en el contexto de la inspección de TypeDescriptor. –