DIフレームワーク(私の場合はNinjectなど)を使用している大規模なプロジェクトでは、依存関係として使用できる他の「サービス」を見つけるために、新しい「サービス」を実装するときにどのようなオプションがありますか。DIを使用する前に、コードベースで、利用可能なすべての機能へのアクセスをほぼ提供する「神」オブジェクトへの参照を取得する傾向に気づきました。その後、Visual StudioのIntelliSenseは、利用可能なすべての機能を見つけるのに非常に役立ちます(明らかにこれそもそもそのようなオブジェクトを持っているというアーキテクチャ上の決定が不十分だったためにのみ、アプローチが可能でした)。
私はいくつかの可能な答えを得ることができ、他の人のために何がうまくいったのかに興味があります:
- 作業しているシステム全体を十分に理解して、他にどのようなクラス/サービスが存在するかを知る必要があります(たとえば、静的クラスがある場合、それらを使用できるようにするには、それらが存在することを知っている必要があります)。
- すべてのクラス/サービスがすべての開発者に理解されるように、コードベースの優れた外部ドキュメントを維持します(これにより、ドキュメントに大きな負担がかかります。私には思えます)。
- APIを作成して、DIコンテナー(Ninjectカーネル)にすべてのバインディングのリストを照会し、使用可能なサービス(おそらくシングルトンのみ)を確認します。これは、ビルドシステムの一部として実行して、開発者が参照できるビルドごとにドキュメントを自動的に生成することもできます。
これは他の開発者にとって問題になったことはありますか?