2010-02-12 3 views
1

Знаете ли вы определение pointcut в Spring.net для перехвата только публичного объекта setter (стандартные свойства и свойства автоматического выполнения)?SpringNet public setter pointcut

Есть ли способ после этого удалить какое-либо свойство по имени (Id, Version ...)?

Возможно ли ограничить pointcut для детей определенного базового класса (EntityBase)?

Как вы можете видеть, я не мастер в pointpoints spring.net ^^ Но я не могу найти информацию.

Идея заключается в том, чтобы сделать автоматический грязный флаг. В приведенном ниже примере цель состоит в том, чтобы установить IsDirty = True только для средства определения свойств данных.

Я использую определение теперь в коде не в конфигурационном файле весны, но оба решения должны быть в порядке, я думаю.

Существующий код:

[Serializable] 
    public class EntityBase 
    { 
     public string Id { get; set; } 
     public long Version { get; set; } 
     public bool IsDeleted { get; set; } 
     public bool IsDirty { get; set; } 
    } 

[Serializable] 
    public class Entity : EntityBase 
    {  
     public string Data { get; set; } 
    } 

public class DirtyInterceptor : IMethodInterceptor 
    { 
     #region IMethodInterceptor Members 

     public object Invoke(IMethodInvocation invocation) 
     { 
      object returnValue = invocation.Proceed(); 
      ((EntityBase)invocation.Target).IsDirty = true; 
      return returnValue; 
     } 

     #endregion 
    } 

...

foreach (object item in keyCache.CachedModel.Values) 
      {    
       ProxyFactory factory = new ProxyFactory(item); 
       factory.AddAdvisor(new DefaultPointcutAdvisor (new SdkRegularExpressionMethodPointcut(???), new DirtyInterceptor())); 
       T ent = (T)factory.GetProxy(); 

       returnList.Add(ent); 
      } 

ответ

1

Вы должны взглянуть на примеры АОП, которые поставляются с Spring.NET. AoP Quickstart # 6 делает именно то, что вы, похоже, ищете. Они расположены в этой папке: \ examples \ Spring \ Spring.AopQuickStart

+0

Хорошо спасибо, я посмотрю на это – Vince