2010-03-04 7 views
7

Ich möchte in der Lage sein, ein Attribut auf eine Schnittstelle anzuwenden, so dass auf jede Methode in jeder Klasse, die diese Schnittstelle implementiert, das Attribut angewendet wird.Anwenden eines Attributs auf eine Schnittstelle mit PostSharp

Ich nahm es in etwa so aussehen würde:

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

Doch wenn ich es auf eine wie unten Schnittstelle gelten, die OnEntry/OnExit Code in das Attribut nie zugegriffen wird, wenn die Methode in der Klasse aufgerufen wird Implementierung der Schnittstelle:

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

Wenn ich das Attribut in der implementierenden Klasse selbst, wie weiter unten gelten, es funktioniert gut:

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

Was vermisse ich/mache ich falsch?

Antwort

7

Sie haben zu verwenden:

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

Oder:

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

Der zweite hat funktioniert. Danke. – krisg

1

Was vermisse ich/mache ich falsch?

Schnittstelle hat keine Implementierung, daher kann kein 'OnEntry/OnExit-Code' ausgeführt werden.

Ich glaube, dass Sie von einer Klasse erben sollten.


Zusätzlich können Sie Multicast the attribute, aber Sie müssen von MulticastAttribute erben.

+0

die Postsharp Dokumentation Zitiert: „können Sie ein benutzerdefiniertes Attribut auf einer Schnittstelle setzen und haben sie implizit auf alle Klassen angewendet Umsetzung dass Schnittstelle." Ergo, wenn ich es auf die Klasse anwenden und es auf alle Methoden/Eigenschaften darin anwendet, dann sollte durch die obige Aussage das Anwenden auf eine Schnittstelle dasselbe tun. Recht? – krisg

+0

Dies gilt für "Custom Attribute Multicasting". Ich habe den Link in der Antwort angegeben. –

+0

@Dmitrii, die Links sind kaputt. Meinten Sie http://doc.sharpcrafters.com/postsharp-2.0/##PostSharp-2.0.chm/html/42748720-e440-487a-a332-4c6b447d349c.htm und http://doc.sharpcrafters.com/postsharp -2.0/## PostSharp-2.0.chm/html/T_PostSharp_Extensibility_MulticastAttribute.htm –

Verwandte Themen