У меня есть общий класс репозитория с различными методами, помеченными аспектом 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);
}
...
}
Аспект правильно применяется к этому переопределенному методу, однако, как только я вызываю реализацию базового класса, аспект базового класса срабатывает.
Очевидно, что дублирование логики базового класса в производных классах не является решением.
Как обойти проблему переопределения аспекта базового класса в производном классе?