繁体   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