コンテンツにスキップ

Service Locator

共通サービスへのアクセスを中央レジストリへ集め、呼び出し側の結合を下げるパターンです。

  • オーディオ・保存・分析サービスをグローバルに参照するとき
  • 初期段階で DI を簡略化したいとき
  • Service Interface
  • Locator Registry
  • Bootstrap Registration

以下のコードは、上で説明した状況を Unity プロジェクトの文脈で単純化した例です。

public interface IAudioService
{
void PlaySfx(string clipId);
}
public static class GameServices
{
public static IAudioService AudioService { get; private set; }
public static void RegisterAudioService(IAudioService audioService)
{
AudioService = audioService;
}
}
public sealed class DamageFeedbackSystem
{
public void OnHit()
{
GameServices.AudioService?.PlaySfx("Hit");
}
}
  • 共通サービスを一箇所から差し替え・注入できるため、初期開発の速度が上がります。
  • 呼び出し側が生成責務を持たなくなるため、利用コードが単純になります。
  • 隠れたグローバル依存が生まれ、テスト分離や依存追跡が難しくなります。
  • 初期化順序が崩れると、実行時 Null 参照が起きやすくなります。

クライアントがインターフェースキーでサービスを解決して使う流れです。

Service Locator の流れ