У нас есть базовый объект мы используем для некоторой MVC-подобной системы, где каждое свойство в потомке написано так:PostSharp аспект для инкубационных свойств, вызывая общий метод
public String FirstName
{
get { return GetProperty<String>("FirstName", ref _FirstName); }
set { SetProperty<String>("FirstName", ref _FirstName, value); }
}
Это делается как для отладки целях и целях уведомления и проверки. Мы используем геттер, чтобы предупредить нас о случаях, когда код, явно указывающий, что он будет читать (для того, чтобы базовый класс мог называть его только тогда, когда эти свойства меняются) и ошибочно, и мы используем setter для уведомлений собственности изменения, обработки грязно-флага, проверки и т.д.
для простоты предположим, что реализация этих методов выглядит следующим образом:
protected T GetProperty<T>(String propertyName,
ref T backingField)
{
return backingField;
}
protected Boolean SetProperty<T>(String propertyName,
ref T backingField,
T newValue)
{
backingField = newValue;
return true;
}
Там больше кода в обоих из них, конечно, но этот код не имеет отношения к моему вопросу, или, по крайней мере, я надеюсь на это. Если да, я изменю вопрос.
Во всяком случае, я хотел бы написать аспект PostSharp, который автоматически реализует вызовы для меня, автоматических свойств, например:
public String FirstName { get; set; }
Есть ли кто-то там, что имеет некоторое представление о том, как я пошел бы об этом?
Я сам сделал классы OnMethodBoundaryAspect, но искусство вызова общей реализации с параметром ref ускользает от меня.
Вот два класса, я хотел бы увеличить класс TestObject, чтобы автоматически вызывать правильный метод для свойства get и set.
public class BaseObject
{
protected T GetProperty<T>(String propertyName,
ref T backingField)
{
return backingField;
}
protected Boolean SetProperty<T>(String propertyName,
ref T backingField,
T newValue)
{
backingField = newValue;
}
}
public class TestObject : BaseObject
{
public String FirstName
{
get;
set;
}
public String LastName
{
get;
set;
}
}
Edit: Опубликовано PostSharp forum а.