Spring.Net установщик общедоступных свойств pointcut

Знаете ли вы какое-либо определение pointcut в spring.net для перехвата только установщика общедоступных свойств (стандартные свойства и свойства авто-реализации)?

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

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

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

Идея заключается в том, чтобы сделать автоматический грязный флаг. В приведенном ниже примере цель - установить 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 ответ

Решение

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

Другие вопросы по тегам