Tôi cố gắng để Lazy < SelectList> để lưu trữ bộ nhớ đệm chậm bất kỳ dữ liệu tra cứu nào trong dự án ASP.NET MVC của tôi. Nhưng tôi không thể ép buộc đối tượng Lazy tải lại dữ liệu tra cứu khi nó được thay đổi.Làm thế nào để buộc đối tượng <T> lười biếng để tạo/tái tạo giá trị?
Tôi tạo lớp dẫn xuất như mã sau. Tôi thấy rằng Lazy < T> sử dụng thuộc tính IsValueCreated để giữ trạng thái hiện tại. Tuy nhiên, trong phương thức MappingFunc tôi không thể thay đổi giá trị của IsValueCreated vì nó là phương thức tĩnh.
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);
};
}
}
Tôi sử dụng mã bên dưới để gọi hàm này. Nhưng nó luôn tạo ra giá trị mới bởi vì giá trị IsValueCreated luôn luôn là sai.
LookupCache.DocTypeList = new LazySelectList(db => db.DocTypes.OrderBy(x => x.Name), "ID", "Name");
Bản sao có thể có của http://stackoverflow.com/questions/5961252/reset-system-lazy/ – Olmo