2010-02-12 9 views
1

Savez-vous une définition de point de coupure dans spring.net pour intercepter uniquement l'éditeur de propriétés publiques (propriétés standard et propriétés d'implémentation automatique)?Spring.Net propriété publique setter pointcut

Y a-t-il un moyen par la suite de supprimer certaines propriétés par leur nom (Id, Version ...)?

Est-il possible de réduire le pointcut aux enfants d'une certaine classe de base (EntityBase)?

Comme vous pouvez le voir je ne suis pas un maître à spring.net pointcuts ^^ Mais je ne trouve pas d'informations.

L'idée derrière cela est de faire un drapeau sale automatique. Dans l'exemple ci-dessous, l'objectif est de définir IsDirty = True uniquement pour l'éditeur de propriétés de données.

J'utilise pour la définition maintenant dans le code pas dans le fichier de configuration de printemps mais les deux solutions devraient être ok je pense.

Code existant:

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

Répondre

1

Vous devriez jeter un oeil sur les exemples Aop livrés avec Spring.NET. AoP Quickstart # 6 fait exactement ce que vous cherchez. Ils se trouvent dans ce dossier: \ examples \ Spring \ Spring.AopQuickStart

+0

Ok merci je vais regarder ça – Vince