2010-03-04 6 views
7

Quiero poder aplicar un atributo a una interfaz para que a cada método en cualquier clase que implemente esa interfaz se le aplique el atributo.Aplicar un atributo a una interfaz usando PostSharp

supuse que sería algo como esto:

[Serializable] 
[AttributeUsage(AttributeTargets.All, Inherited = true)] 
public sealed class TestAttribute : OnMethodBoundaryAspect 
{ 
    ... 
} 

Sin embargo, cuando lo aplico a una interfaz como la de abajo, el código OnEntry/AlSalir en el atributo no se accede cuando se llama al método en la clase la implementación de la interfaz:

[Test] 
public interface ISystemService 
{ 
    List<AssemblyInfo> GetAssemblyInfo(); 
} 

si aplico el atributo dentro de la misma clase que implementa, como abajo, que trabaja muy bien:

[Test] 
public class SystemService : ISystemService 
{ 
    ... 
} 

¿Qué estoy perdiendo/haciendo mal?

Respuesta

7

usted tiene que utilizar:

[MulticastAttributeUsage(..., Inheritance=MulticastInheritance.Multicast)] 
public sealed class TestAttribute : OnMethodBoundaryAspect 

O:

[Test(AttributeInheritance=MulticastInheritance.Multicast] 
public interface ISystemService 
+0

El segundo funcionó. Gracias. – krisg

1

¿Qué estoy perdiendo/haciendo mal?

interfaz no tiene implementación, por lo tanto no puede ejecutar ningún 'código OnEntry/OnExit'.

Creo que deberías heredar de una clase.


Además, puede Multicast the attribute, pero hay que heredar de MulticastAttribute.

+0

Citando la documentación PostSharp: "puede poner un atributo personalizado en una interfaz y haga que sea implícitamente aplicado en todas las clases de incorporación de dicha interfaz." Ergo, si lo aplico a la clase y lo aplica a todos los métodos/propiedades, entonces mediante la declaración anterior, aplicarlo a una interfaz debería hacer lo mismo. ¿Derecha? – krisg

+0

Esto se aplica a 'Multidifusión de atributo personalizado'. Proporcioné el enlace en la respuesta. –

+0

@Dmitrii, los enlaces están rotos. ¿Quisiste decir http://doc.sharpcrafters.com/postsharp-2.0/##PostSharp-2.0.chm/html/42748720-e440-487a-a332-4c6b447d349c.htm y http://doc.sharpcrafters.com/postsharp -2.0/## PostSharp-2.0.chm/html/T_PostSharp_Extensibility_MulticastAttribute.htm –

Cuestiones relacionadas