私は、(すべてが計画どおりに進んだ場合) 一度に数か月実行される Windows サービスを作成しています。サービスの存続期間中、いくつかの WCF サービス (他のローカル アプリと通信するための名前付きパイプ) を維持し、組み込みデータ ストア (RavenDB はおそらく、この質問には多かれ少なかれ関係ありません) を実行し、それを使用します。 SIP サービス (VoIP 機能) を維持するためのサードパーティ ソフトウェア。私が直面している課題のいくつかは、イベントに反応し、これらのイベントが表すものを処理するためにいくつかの新しいビジネス オブジェクトを作成する必要があることを意味します。
今、私は Mark Seemann の本 (少なくともこの議論に関連する部分) を読み、なぜサービスロケーターが悪いのか、なぜコンポジションルート (私の場合はサービスの開始点) でこれを処理することが良いのかを理解しています。一般的な場合。
しかし、私が理解していないのは、これがあらゆる状況にどのように適用できるかということです。アプリケーションの開始時にルート全体を構成できる場合や、フレームワークによる要求ごとに IoC エンジンが使用される MVC のような場合に、どのように完璧になるかがわかります。ただし、長時間実行されるサービスの場合、すべてのオブジェクトを前もって作成することは、最良の場合でも非効率的であり、場合によっては不可能であると思います。必要なすべてのオブジェクトを前もって取得し、人生が進むにつれて新しいオブジェクトを作成する必要がない、重要なサービスを作成できるとは想像できません。
さて、これは私を暗黒面に誘い込み、サービスロケーターのように隠れた依存関係を犠牲にするのに十分ではありません. しかし、ここで何をするのが正しいのでしょうか? 各着信呼び出しに応答して作成する必要がある CallHandlerService がある場合 (たとえば、高価で管理されていないリソースを使用するため)、それを行うにはどうすればよいですか?
コンポジションルート + ほんの少しのサービスロケーター?
最後の部分は深刻ではありませんでしたが、これを適切に解決する方法を知りたいです。