gpt4 book ai didi

c# - 在派生类中覆盖基类 PostSharp 方面

转载 作者:行者123 更新时间:2023-11-30 18:33:10 27 4
gpt4 key购买 nike

我有一个通用存储库类,其中包含各种标记有 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 文档 link

关于c# - 在派生类中覆盖基类 PostSharp 方面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17812597/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com