2015-11-12 31 views
1

我有一種情況,A類的CanBeDependedUpon方法被多播到A類的屬性。但是當從方面DependsOn檢查類A時,我沒有在Y的屬性上找到CanBeDependedUpon。這是正確的PostSharp行爲嗎?我可以使用反射來查找多播產生的方面嗎?

[CanBeDependedUpon] 
class A 
{ 
    public bool Foo 
    { 
     get; 
     set; 
    } 

    [DependsOn("Foo")] 
    public bool Bar 
    { 
     get; 
     set; 
    } 
} 

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Property, AllowMultiple = true)] 
[MulticastAttributeUsage(MulticastTargets.Class | MulticastTargets.Struct | MulticastTargets.Property, PersistMetaData = true, AllowMultiple = true)] 
class CanBeDependedUpon : Aspect 
{ 
} 

class DependsOn : Aspect 
{ 
    private string _target; 

    public DependsOn(string target) 
    { 
     _target = target; 
    } 

    public override bool CompileTimeValidate(object target) 
    { 
     //validate that the target property exists and is annotated with X. 
     return base.CompileTimeValidate(target); 
    } 
} 

回答

1

默認情況下,PostSharp會在方面應用到代碼後刪除屬性。如果您想使用反射查找它們,您可以明確指示PostSharp保留屬性。

爲此,您需要將MulticastAttributeUsage屬性應用於您的班級,並將PersistMetaData設置爲true

[MulticastAttributeUsage(MulticastTargets.Class, PersistMetaData = true)] 

這個用例記錄在這裏:http://doc.postsharp.net/multicast-reflection

相關問題