我嘗試懶惰< SelectList>用於在ASP.NET MVC項目中緩存任何查找數據。但是我不能強制Lazy對象在更改時重新加載查找數據。如何強制懶惰<T>對象創建/重新創建值?
我創建派生類,如下面的代碼。我發現Lazy < T>使用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值始終爲false。
LookupCache.DocTypeList = new LazySelectList(db => db.DocTypes.OrderBy(x => x.Name), "ID", "Name");
http://stackoverflow.com/questions/5961252/reset-system-lazy/可能的重複 – Olmo 2011-06-06 17:01:55