重写派生类中的基类PostSharp方面
本文关键字:基类 PostSharp 方面 派生 重写 | 更新日期: 2023-09-27 18:24:21
我有一个通用的存储库类,该类具有用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文档链接