これらのインターフェイスがある場合:
ISequencer = interface;
IController = interface;
それらの実装(コントローラーには、コンストラクターインジェクションによるシーケンサーが必要です):
TSequencer = class(TInterfacedObject, ISequencer)
end;
TController = class(TInterfacedObject, IController)
constructor Create(Sequencer: ISequencer);
end;
実装をグローバルコンテナに登録します。
GlobalContainer.RegisterType<TSequencer>.Implements<ISequencer>;
GlobalContainer.RegisterType<TController>.Implements<IController>;
GlobalContainer.Build;
IController
そして最後に、自動配線機能を使用して、インターフェイスの新しいインスタンスを取得できます。
Controller := ServiceLocator.GetService<IController>;
実際のアプリケーションコードは問題ありません。しかし、テストプロジェクトでは、モックを作成したいと思いISequencer
ます。テストによっては、コンテナにの実装を要求するときにISequencer
、実際の実装(TSequencer
)が必要な場合と、模擬実装(のようなTSequencerMock
)が必要な場合があります。この切り替えを行うにはどうすればよいですか?