特定のクラスではなくコントラクトをプログラミングすると同時に、IoC/依存性注入を使用することに同意しようとしています。私が抱えているジレンマは、次の間の緊張です。
Do program to interfaces to IoC : インターフェイスに大きく依存する IoC から始めました。Spring のサンプル プロジェクトから判断すると、IoC とのコントラクトに合わせてプログラミングする場合は、インターフェースが最適です。
( ... 一般的には抽象クラスが好まれますが、インターフェイスの主な欠点は、API の進化を可能にすることに関して、クラスよりもはるかに柔軟性が低いことです)
コンストラクターを介してクラスの依存関係を明示的にする 私の直感では、クラスのコンストラクターに依存関係を渡すことは、プログラミングの良い実践方法であるということです。実際、これは依存性注入です。
...インターフェース/抽象クラスでコンストラクター署名を強制できないことを除いて:インターフェースも抽象クラスもコンストラクター署名を定義することを許可しません(簡単/エレガントに)。フレームワーク設計ガイドラインのセクション 4.4 も参照してください:抽象型でパブリックまたは保護された内部コンストラクターを定義しないでください。... コンストラクターは、ユーザーが型のインスタンスを作成する必要がある場合にのみパブリックにする必要があります。
この質問は、以前のスタックオーバーフローの質問に関連しています:コンストラクターの署名を定義するインターフェイス?
しかし、私の質問は次のとおりです。
上記の質問で尋ねたように、C# インターフェイス/抽象クラスではコンストラクターを定義できないため、実用的なレベルでは次のようになります。
これを、コンストラクターを介して依存関係を渡すという賢明な慣行とどのように調和させますか?
編集:答えてくれてありがとう。この場合、どうすればよいかについての洞察を期待しています。コンストラクター引数を使用しないだけですか? 依存関係を取るある種の Init() メソッドを使用しますか? Edit2:素晴らしい回答をありがとう、とても役に立ちました。