У меня есть простой ASP.NET MVC
контроллер. В нескольких методах действий я получаю доступ к ресурсу, который, как я скажу, стоит .
Вот я и подумал, почему бы не сделать это статичным Поэтому вместо двойной проверки блокировки я подумал, что могу использовать Lazy<T>
в .NET 4.0. Позвоните в дорогую услугу один раз, а не несколько раз.
Итак, если это мой псевдо-код, как я могу его изменить, используйте 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);
}
}