私はシンプルなASP.NET MVC
コントローラを持っています。いくつかのアクションメソッドの中で、私はが高価であると言うリソースにアクセスします。ASP.NET MVCコントローラでLazy <T>を使用するにはどうすればよいですか?
だから私はそれを静的にしてみてはいかがでしょうか。したがって、double checked lockingを実行する代わりに、私はLazy<T>
の使用を.NET 4.0で活用できると考えました。 高価なサービスを複数回ではなく1回呼び出します。
これが私の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
オブジェクトの怠惰なインスタンス化ではなく、シングルトンを探しているようです。もちろん、*レイジーを使ってシングルトンを作ることができます。 –