tiempo - recorrer controles de un formulario c#
Agregar código al principio/final de los métodos en tiempo de ejecución dinámicamente (5)
Como otros han respondido, tales preocupaciones transversales a menudo se abordan con la programación orientada a aspectos (AOP).
Una forma de hacer AOP es con la instrumentación de código con herramientas como PostSharp, pero una alternativa que no requiere herramientas adicionales es mediante la utilización de Dependency Injection (DI) y el patrón de diseño Decorator .
Imagine que su código consume la interfaz IFoo:
public interface IFoo
{
string GetStuff(string request);
}
Puede tener una implementación concreta MyFoo of IFoo, pero también puede escribir uno o varios Decorators que manejan diferentes aspectos:
public class AdministratorGuardingFoo : IFoo
{
private readonly IFoo foo;
public AdministratorGuardingFoo(IFoo foo)
{
if (foo == null)
{
throw new ArgumentNullException("foo");
}
this.foo = foo;
}
public string GetStuff(string request)
{
new PrincipalPermission(null, "Administrator").Demand();
return this.foo.GetStuff(request);
}
}
Ahora puede (tener su Contenedor DI) ajustar MyFoo
en AdministratorGuardingFoo
. Todos los consumidores que consumen IFoo
no notarán la diferencia.
Sé que la instrumentación es una técnica para agregar código de seguimiento de forma dinámica en los métodos para habilitar el rastreo y la depuración.
Me preguntaba si esto es solo una opción de "Rastreo", codificada de forma rígida en el CLR para agregar solo código de rastreo, o ¿existe la posibilidad de agregar algún código a los métodos?
Por ejemplo, quiero verificar una condición al comienzo de cada llamada a un método en una determinada clase (por ejemplo, para obtener permisos). ¿Puedo hacer esto agregando código dinámico al comienzo de los métodos en tiempo de ejecución?
No estoy seguro de cómo funciona esta traza de "instrumentación", pero me pregunto si esto también puede usarse para otros objetivos o no.
El CLR permite la interceptación del método a través de los receptores de mensajes.
Sé que PostSharp le permite agregar ''aspectos'' a los métodos existentes a través de la atribución para que pueda agregar rastros de entrada / salida en sus métodos
Básicamente, lo que debes hacer es escribir un perfilador de CLR y usar la API profiler en c ++
Debe implementar la interfaz ICorProfilerCallback.
Lo que estás buscando está en la devolución de llamada JITCompilationStarted. Se llama a este método cada vez que se llama a un método gestionado y antes de que el compilador jit compile el IL en el código máquina. Cualquier trabajo de inserción de código durante el tiempo de ejecución debe hacerse en JITCompilationStarted.
Puede ver la cubierta de la parte de la herramienta de cobertura de código abierto como un ejemplo de cómo hacerlo.
Te refieres a la Programación Orientada a Aspectos (AOP).
Eche un vistazo a PostSharp .
También: marcos orientados a aspectos de código abierto en C #