Intento Lazy < SelectList> para el almacenamiento en caché vago de cualquier información de búsqueda en mi proyecto ASP.NET MVC. Pero no puedo obligar al objeto Lazy a volver a cargar los datos de búsqueda cuando se modifique.Cómo forzar al objeto Lazy <T> a crear/volver a crear el valor?
Creo clase derivada como el siguiente código. Descubrí que Lazy < T> usa la propiedad IsValueCreated para mantener el estado actual. Sin embargo, en el método MappingFunc no puedo cambiar el valor de IsValueCreated porque es un método estático.
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);
};
}
}
Utilizo el siguiente código para llamar a esta función. Pero siempre crea un nuevo valor porque el valor de IsValueCreated siempre es falso.
LookupCache.DocTypeList = new LazySelectList(db => db.DocTypes.OrderBy(x => x.Name), "ID", "Name");
Posible duplicado de http://stackoverflow.com/questions/5961252/reset-system-lazy/ – Olmo