[英]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.