簡體   English   中英

在派生類中覆蓋基類PostSharp方面

[英]Override base class PostSharp aspect in derived class

我有一個通用的存儲庫類,其中各種方法都標有PostSharp方面( SecuredOperation )......

public class Repository<TEntity> : IRepository<TEntity>, ISecurable
    where TEntity : class, IEntity
{      
    ...

    [SecuredOperation(DomainAccess.Write)]        
    public virtual void Add(TEntity entity)
    {
        this.Context.AddEntity(entity);
    }

    ...
}

在我的一些派生的存儲庫類中,我想更改Add()方法所需的訪問權限(例如DomainAccess.None )。

我最初的嘗試是覆蓋方法並重新應用方面......

public class SomeRepository : Repository<SomeEntity>
{       
    ...

    [SecuredOperation(DomainAccess.None)]
    public override void Add(SomeEntity entity)
    {
        base.Add(entity);
    }

    ...
}

該方面正確應用於此重寫方法,但是一旦我調用基類實現,基類方面就會啟動。

顯然,在派生類中復制基類邏輯不是一種解決方案。

如何解決覆蓋派生類中的基類方面的問題?

我不是PostSharp專業版,但我認為你需要在重寫方法上添加並設置AttributeReplace值為true。 還有一個AllowMultiple

[SecuredOperation(DomainAccess.None, AttributeReplace = true)]
    public override void Add(SomeEntity entity)

您還可以定義方面,以便通過添加以下內容始終覆蓋前一個方面

[MulticastAttributeUsage(MulticastTargets.Method, AllowMultiple = false)]

到方面類定義。

PostSharp文檔鏈接

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM