2013-07-23 5 views
2

У меня есть общий класс репозитория с различными методами, помеченного PostSharp аспектом (SecuredOperation) ...Override базового класса PostSharp аспект в производном классе

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); 
    } 

    ... 
} 

Аспект правильно применен к этому переопределенному методу, однако, как только я вызываю реализацию базового класса базового класса аспект пинки в

Очевидно, что дублирование логики базового класса в производных классах не является решением.

Как я могу обойти эту проблему переопределения аспекта базового класса в производном классе?

ответ

0

Я не PostSharp про, но я думаю, что вам нужно добавить и установить AttributeReplace значения истинны на переопределенной методе. Существует также AllowMultiple

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

Вы также можете определить аспект, так что он всегда будет переопределять предыдущее, добавив следующее

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

к определению аспект класса.

PostSharp doc link