Как заставить объект Lazy создавать / воссоздавать значение?

Я пытаюсь использовать Lazy для ленивого кэширования любых данных поиска в моем проекте ASP.NET MVC. Но я не могу заставить объект Lazy перезагружать данные поиска при их изменении.

Я создаю производный класс, как в следующем коде. Я обнаружил, что Lazy использует свойство IsValueCreated для сохранения текущего состояния. Однако, в методе MappingFunc я не могу изменить значение IsValueCreated, потому что это статический метод.

public class LazySelectList : Lazy<SelectList>
{
    public LazySelectList(Func<LimeEntities, IEnumerable> initFn, string dataValueField, string dataTextField)
        : base(MapingFunc(initFn, dataValueField, dataTextField))
    {
    }

    public new bool IsValueCreated { get; set; }

    public static Func<SelectList> MapingFunc(Func<DbContext, IEnumerable> valueFactory, string dataValueField, string dataTextField)
    {
        return () =>
        {
            var context = ObjectFactory.GetInstance<DbContext>();

            return new SelectList(valueFactory(context), dataValueField, dataTextField);
        };
    }
}

Я использую приведенный ниже код для вызова этой функции. Но он всегда создает новое значение, потому что значение IsValueCreated всегда ложно.

LookupCache.DocTypeList = new LazySelectList(db => db.DocTypes.OrderBy(x => x.Name), "ID", "Name");
10
задан Soul_Master 4 February 2011 в 11:18
поделиться