Tôi có bộ điều khiển đơn giản ASP.NET MVC
. Bên trong một vài phương pháp hành động, tôi truy cập vào một tài nguyên mà tôi sẽ nói là đắt tiền.Làm thế nào tôi có thể sử dụng Lazy <T> trong bộ điều khiển ASP.NET MVC?
Vì vậy, tôi nghĩ, tại sao không làm cho nó tĩnh. Vì vậy, thay vì làm double checked locking Tôi nghĩ rằng tôi có thể tận dụng việc sử dụng Lazy<T>
trong .NET 4.0. Gọi số dịch vụ đắt tiền một lần thay vì nhiều lần.
Vì vậy, nếu đây là mã pseduo của tôi, làm thế nào tôi có thể thay đổi nó sử dụng Lazy<T>
. Ví dụ này, tôi sẽ sử dụng File System
là là tài nguyên đắt tiền Vì vậy, với ví dụ này, thay vì nhận tất cả các tệp từ đường dẫn đích, mỗi lần yêu cầu gọi ActionMethod, tôi hy vọng sẽ sử dụng giữ danh sách tệp đó .. tất nhiên, chỉ thực hiện cuộc gọi lần đầu tiên.
Giả định tiếp theo: đừng lo lắng nếu nội dung bị thay đổi. Đó là phạm vi, ở đây.
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);
}
}
Có gì sai khi sử dụng bộ nhớ cache ASP.NET? – tvanfosson
Nghe có vẻ như bạn đang tìm kiếm một singleton, chứ không phải là lười biếng instantiation của một đối tượng. Tất nhiên, bạn có thể * sử dụng * 'Lazy' để tạo ra một singleton ... –