我有一个简单的ASP.NET MVC
控制器。在一些动作方法中,我访问一个资源,我会说很贵。如何在ASP.NET MVC控制器中使用懒惰<T>?
所以我想,为什么不把它变成静态的。因此,我认为我可以利用.NET 4.0中的Lazy<T>
来代替double checked locking。一次而不是多次拨打昂贵的服务。
所以,如果这是我的pseduo代码,我该如何改变它使用Lazy<T>
。 对于这个痛苦的例子,我将使用File System
作为昂贵的资源 因此,在这个例子中,不是从目标路径获取所有文件,每次请求调用ActionMethod时,我都希望使用Lazy保存文件列表..这当然只是第一次打电话。
下一个假设:如果内容发生变化,请不要担心。这里超出了范围。
public class FooController : Controller
{
private readonly IFoo _foo;
public FooController(IFoo foo)
{
_foo = foo;
}
public ActionResult PewPew()
{
// Grab all the files in a folder.
// nb. _foo.PathToFiles = "/Content/Images/Harro"
var files = Directory.GetFiles(Server.MapPath(_foo.PathToFiles));
// Note: No, I wouldn't return all the files but a concerete view model
// with only the data from a File object, I require.
return View(files);
}
}
使用ASP.NET缓存有什么问题? – tvanfosson
这听起来像你正在寻找一个单例,而不是懒惰的对象实例化。当然,你可以*使用懒惰''创建一个单身... –