Я бы хотел реализовать отложенную загрузку свойств с помощью PostSharp.
Чтобы сделать его коротким, вместо записи
SomeType _field = null;
private SomeType Field
{
get
{
if (_field == null)
{
_field = LongOperation();
}
return _field;
}
}
Я хотел бы написать
[LazyLoadAspect]
private object Field
{
get
{
return LongOperation();
}
}
Итак, я идентифицирую, что мне нужно генерировать некоторый код в классе для генерации вспомогательного поля, а также внутри метода getter для реализации теста.
В PostSharp я рассматривал возможность переопределения CompileTimeInitialize
, но мне не хватает знаний, чтобы справиться с скомпилированным кодом.
EDIT:
Вопрос можно распространить на любой метод без параметров, например:
SomeType _lazyLoadedField = null;
SomeType LazyLoadableMethod ()
{
if(_lazyLoadedField ==null)
{
// Long operations code...
_lazyLoadedField = someType;
}
return _lazyLoadedField ;
}
станет
[LazyLoad]
SomeType LazyLoadableMethod ()
{
// Long operations code...
return someType;
}