2010-02-12 46 views
1

您是否知道spring.net中的任何切入點定義僅攔截公共屬性setter(標準屬性和自動執行屬性)?Spring.Net公共屬性setter切入點

有沒有辦法通過名稱刪除某些屬性(Id,Version ...)?

是否有可能將切點縮小到某個基類(EntityBase)的子節點?

正如你所看到的,我不是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的例子。 AoP Quickstart#6完全符合您的需求。他們位於這個文件夾:\ examples \ Spring \ Spring.AopQuickStart

+0

好的,謝謝,我會看看這個 – Vince 2010-02-16 09:04:57