имеем примерно такой код:
public abstract MyAccessor : DataAccessor
{
[Cache]
public abstract List<MyClass> SelectAll();
}
public class MyForm : Form
{
public void LoadData()
{
//...
myBinder.List = DataAccessor.CreateInstance<MyAccessor>().SelectAll();
//...
}
}
первый запуск — все гут, а во второй (или при повторном вызове LoadData()) куда-то теряется список MyClass-ов.
вообще, он никуда не теряется, его "теряет" ObjectBinder. дело в том, что биндер по умолчанию чистит созданный им список (если OObjectBinder.List присваивается не наследник EditableArray, то биндер заворачивает его в EditableArray) и при уничтожении биндера или переприсвоении листа он эту обертку грохает, а вместе с ней и результат вызова MyAccessor.SelectAll(), который, в нашем случае, закеширован и сидит в статике. Ну и при следующем обращении к MyAccessor.SelectAll() нам вертается пустой список.
Для управления этим поведением у биндера есть два свойства DisposeList (false по умолчанию) и DisposeCreatedList (true по умолчанию).
Дабы кеш не пропал, оба должны быть false.
Не наступайте на наши грабли

мы их приватезировали