Spring.Net установщик открытого свойства pointcut - PullRequest
1 голос
/ 12 февраля 2010

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

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

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

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

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

1 голос
/ 15 февраля 2010

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

...