NB: Внезапно пропал список из кеша?
От: ili Россия  
Дата: 04.03.09 11:12
Оценка:
имеем примерно такой код:

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.

Не наступайте на наши грабли мы их приватезировали
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.