¿Es posible hacer eso en C# 3 o 4? Tal vez con un poco de reflexión?Ejecutar un método antes de todos los métodos de una clase
class Magic
{
[RunBeforeAll]
public void BaseMethod()
{
}
//runs BaseMethod before being executed
public void Method1()
{
}
//runs BaseMethod before being executed
public void Method2()
{
}
}
EDITAR
Hay una solución alternativa para esto, hacer Magic
un producto único y poner su código en el captador de la instancia estática. Eso es lo que hice:
public class Magic
{
private static Magic magic = new Magic();
public static Magic Instance
{
get
{
magic.BaseMethod();
return magic;
}
}
public void BaseMethod()
{
}
//runs BaseMethod before being executed
public void Method1()
{
}
//runs BaseMethod before being executed
public void Method2()
{
}
}
¿Qué tal un constructor? – JConstantine
Usar un constructor no es una solución, porque si tuviera que ejecutar, digamos, dos métodos de una instancia, solo obtendría el método base para ejecutarlo una vez. También muy inadecuado para instancias estáticas. –
Puede hacer esto usando 'dynamic' e implementando [' IDynamicMetaObjectProvider'] (http://msdn.microsoft.com/en-us/library/system.dynamic.idynamicmetaobjectprovider.aspx). Esto le permitirá ejecutar su propio código durante el enlace, lo que sucede antes de que se ejecute un método. Nota: esta sugerencia se proporciona como una curiosidad. En realidad, no es una buena manera de resolver su problema. – Brian