私だけかどうかはわかりませんが、ASP.NET MVC コントローラーで使用されるコンストラクター インジェクションが不要なリソース消費を引き起こしているように感じます。
特定の Web 要求に使用されていないコンポーネントは、コントローラーの作成時に作成する必要があります。のどが渇いたときにブースの牛乳とジュースを買って、ジュースを捨てるようなものです。
私の懸念を明確にするために、コントローラーのコンストラクター注入とサービスロケーターのこれらの例を比較してください。
コンストラクター インジェクション、ブース deps が作成されますが、使用されるのは 1 つだけです。
public class MyController : Controller
{
private readonly IDep1 _dep1;
private readonly IDep2 _dep2;
public MyController(IDep1 dep1, IDep2 dep2)
{
_dep1 = dep1;
_dep2 = dep2;
}
public ActionResult Index()
{
_dep1.MakeStuff();
return View();
}
public ActionResult PageTwo()
{
_dep2.MakeStuff();
return View();
}
}
Service Locator、各 dep は使用時にのみ作成されます。
public class MyController : Controller
{
public ActionResult Index()
{
var dep1 = ServiceLocator.Resolve<IDep1>();
dep1.MakeStuff();
return View();
}
public ActionResult PageTwo()
{
var dep2 = ServiceLocator.Resolve<IDep2>();
dep2.MakeStuff();
return View();
}
}
IoC コンテナー (多くの理由で有益です) は引き続き Service Locator パターンに使用できることに注意してください。IoC やコンテナー フレームワークに関する議論にしたくありません。また、コンストラクター インジェクション (依存関係の明確な可視性など) から得られるメリットもありません。私の懸念は、コンストラクター インジェクション パターンと、ASP.NET MVC コントローラーの状況でリソースを浪費する方法です。
ここでの主な質問は次のとおりだと思います: Service Locator は、上記のシナリオ (ASP.NET MVC コントローラー) のパフォーマンスに関してより優れたソリューションですか?