autofacまたはninjectのようなIOCコンテナによって注入されるサービスを使用するコントローラがあるとします。サービスは、ビューを呼び出すだけの単純なアクションをトリガーしたい場合でも、要求がそのコントローラーにヒットするたびに初期化されます。ここでの質問は、実際に必要なときにサービスの初期化を延期して、リソースを節約できるようにする方法です。ここで私はLazyを使うべきですか?あるいは、コントローラの代わりにこのサービスをメソッドに注入する必要がありますか?mvcコントローラで注入されたサービスの実行を延期する方法
例:
public class SomeController : Controller
{
private readonly ISomeService _service;
public SomeController(ISomeService service)
{
this._service = service;
}
// action that completely doesn't need to initialize service
public ActionResult Index()
{
return View();
}
// this action needs to initialize
public ActionResult Save()
{
this._service.DoSomething();
return View();
}
}
プロパティインジェクションを実装することができるので、(サービスへの)ゲッターが最初に呼び出されたときに注入されます。 – EluciusFTW
パフォーマンステストを実行して、違いがどのようなもので、実際にアプリケーションにとって重要かどうかを確認しましたか? – Steven
なぜ 'Lazy 'への参照が' T 'への参照よりも速く格納されるのでしょうか? –
Maarten