C#
段階2:サービスロケータ—アンチパターン認定
出典: ASP.NET MVC 5 で DI は業務系に要るのか — 入れない派の論点も書く — DIの3段階理解— DIなし→サービスロケータ→コンストラクタインジェクション / 段階2:サービスロケータ—アンチパターン認定
// ❌段階2:サービスロケータ(アンチパターン扱い)
public static class ServiceLocator
{
public static ICustomerService GetCustomerService()
=> new CustomerService(new SqlConnection(ConfigurationManager.ConnectionStrings["MyDb"].ConnectionString));
}
public class CustomerController : Controller
{
public ActionResult Index()
{
var service = ServiceLocator.GetCustomerService(); // ←静的取得
return View(service.GetActive());
}
}
▸ この snippet は実行結果未収録
▸ 実行結果は未収録です
Source収録記事
この snippet は記事の「DIの3段階理解— DIなし→サービスロケータ→コンストラクタインジェクション / 段階2:サービスロケータ—アンチパターン認定」セクションに登場する。コードの前後の文脈・ハマりどころの解説は記事本文で。
同じ記事から
4 件// ✅段階1: DIなし(Controller内でnew) public class CustomerController : Controller { private CustomerService _service;未収録
段階1: DIなし— Controller内で直接new
#63e0ca06e49e
// ✅段階3:コンストラクタインジェクション(DI本命) public class CustomerController : Controller { private readonly ICustomerService _service;未収録
段階3:コンストラクタインジェクション— DIコンテナの本命
#cd2c61a185a2
// ✅定石: Unity DIコンテナ設定(App_Start/UnityConfig.cs) using Unity; using Unity.Lifetime; using Unity.AspNet.Mvc;未収録
Unity DIコンテナの設定— ASP.NET MVC 5への組み込み
#d3c77983766f
// ✅ DbContextのライフサイクル別の挙動 // Singleton:複数リクエストで同じインスタンス→ ❌変更追跡が混ざる事故 container.RegisterType<MyDbContext>(new ContainerControlledLifetimeManager()); // ❌ NG未収録
DbContextのライフサイクル登録—連載第4回との接続
#110747337a94
