私はASP.NET MVCプロジェクトのルックアップデータを怠惰にキャッシュするために、SelectList>を試してみてください。<しかし、Lazyオブジェクトを変更したときにルックアップデータを強制的にリロードすることはできません。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