Spring.Net公共属性setter切入点

时间:2010-02-12 14:45:44

标签: c# properties spring.net pointcuts

你知道spring.net中的任何切入点定义只拦截公共属性setter(标准属性和自动实现属性)吗?

之后是否有办法按名称删除某些属性(Id,Version ...)?

是否有可能将切入点限制为某个基类(EntityBase)的子项?

正如你所看到的,我不是spring.net切入点的主人^^但是我找不到信息。

背后的想法是制作一个自动脏标志。在下面的示例中,目标是仅为数据属性设置器设置IsDirty = True。

我现在使用的是代码而不是spring配置文件,但我认为这两种解决方案都应该没问题。

现有代码:

[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 个答案:

答案 0 :(得分:1)

您应该看一下Spring.NET附带的AoP示例。 AoP Quickstart#6完全符合您的要求。它们位于此文件夹中:\ examples \ Spring \ Spring.AopQuickStart