3

我有一个通用存储库类,其中有各种方法标记有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);
    }

    ...
}

方面正确地应用于这个被覆盖的方法,但是一旦我调用基类实现,基类方面就会启动。

显然,在派生类中复制基类逻辑并不是一个解决方案。

如何解决在派生类中覆盖基类方面的问题?

4

1 回答 1

0

我不是 PostSharp 专业人士,但我认为您需要在被覆盖的方法上添加AttributeReplace值并将其设置为 true。还有一个 AllowMultiple

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

您还可以定义方面,以便它始终通过添加以下内容覆盖前一个方面

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

到方面类定义。

PostSharp 文档链接

于 2014-03-12T17:03:49.283 回答