私は現在、DIとSLの長所と短所を比較検討しています。しかし、私は次のキャッチ22に気づきました。これは、すべてにSLを使用し、各クラスにIoCコンテナーのみを注入する必要があることを意味します。
DIキャッチ22:
Log4Netなどの一部の依存関係は、単にDIに適合しません。私はこれらのメタ依存関係を呼び出しており、コードの呼び出しに対して不透明である必要があると感じています。私の正当な理由は、単純なクラス「D」が元々ロギングなしで実装され、その後ロギングを必要とするようになった場合、依存クラス「A」、「B」、および「C」は、何らかの方法でこの依存関係を取得し、 「A」から「D」(「A」が「B」を構成し、「B」が「C」を構成すると仮定)。1つのクラスにログインする必要があるという理由だけで、コードを大幅に変更しました。
したがって、メタ依存関係を取得するには不透明なメカニズムが必要です。シングルトンとSLの2つが思い浮かびます。前者には、主に厳密なスコープ機能に関して既知の制限があります。せいぜいシングルトンは、アプリケーションスコープ(つまり静的変数)に格納されているAbstractFactoryを使用します。これによりある程度の柔軟性が得られますが、完全ではありません。
より良い解決策は、IoCコンテナーをそのようなクラスに注入し、そのクラス内からSLを使用して、コンテナーからのこれらのメタ依存関係を解決することです。
したがって、キャッチ22:クラスにIoCコンテナーが注入されているので、他のすべての依存関係も解決するためにそれを使用してみませんか?
私はあなたの考えを大いに感謝します:)