2010-03-04 86 views
7

我希望能夠將屬性應用於接口,以便實現該接口的任何類中的每個方法都將應用該屬性。使用PostSharp將屬性應用到接口

我以爲它會是這個樣子:

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

然而,當我把它應用到像下面的界面,在屬性OnEntry /的OnExit代碼時調用該方法的類從未訪問實現該接口:

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

如果我實現類本身適用的屬性,如下面,它工作正常:

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

我在想什麼/做錯了什麼?

回答

7

你必須使用:

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

或者:

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

第二個人工作。謝謝。 – krisg 2010-03-05 06:12:54

1

我在想什麼/做錯了什麼?

接口沒有實現,因此不能執行任何'OnEntry/OnExit代碼'。

我相信你應該從一個類繼承。


此外,您可以Multicast the attribute,但你需要從MulticastAttribute繼承。

+0

引述PostSharp文檔: 「你可以把自定義屬性在接口上,並將它隱式應用上實現的所有類接口。」 Ergo,如果我將它應用於類並將其應用於其中的所有方法/屬性,那麼通過上述語句,將其應用於接口應該也是這樣。對? – krisg 2010-03-04 04:48:40

+0

這適用於'自定義屬性多播'。我在答案中提供了鏈接。 – 2010-03-04 05:24:21

+0

@Dmitrii,鏈接被破壞。你的意思是http://doc.sharpcrafters.com/postsharp-2.0/##PostSharp-2.0.chm/html/42748720-e440-487a-a332-4c6b447d349c.htm和http://doc.sharpcrafters.com/postsharp -2.0/## PostSharp-2.0.chm/html/T_PostSharp_Extensibility_MulticastAttribute.htm – 2011-11-21 11:18:38