謝罪これまでに質問/回答されていた場合は、このトピックに関する検索で実際に私の仕事に直接関係しない膨大な種類の話題につながっています。コンストラクタのテンプレートリファクタリングDI
現在、Ninjectを使用してコンストラクタインジェクションをサポートするために、内部コードベース内で大量のコンストラクタをリファクタリングするという目標を達成する必要があります。 StaticKernelReferenceが、これは同様にアンチパターンと考えられている(私は承知していますNinject StandardKernelの静的インスタンスへの参照です
IRequiredService => StaticKernelReference.Get<IRequiredService>();
:現在、我々はゲッターのプロパティ、EXとしてKernelInstance.Get<T>
のインスタンスを大量に持っていますこのリファクタリングは、Ninjectインスタンスへのすべての静的参照を削除する目的の一部です)
明らかにアンチパターンと見なされるこのアプローチから離れるにつれて、私はこれらの参照をこのアプローチにリファクタリングしたいと考えています。
public class ClassWithDependencies {
readonly IRequiredSevice _requiredService;
public ClassWithDependencies(IRequiredService requiredService){
_requiredService = requiredService;
}
}
私の質問は本当に2倍ですが、どちらの質問にも助けていただければ幸いです。
は、これらの依存関係のコンストラクタ・インジェクションを行う行うには理想的な方法を提供し、上記の例です(SOおよび他の場所での私の研究はイエスを示しているが、私は間違った結論を行った場合、私は入力をお願い申し上げます)。私はこのアプローチが既存のものを改善していると確信していますが、理想的でない場合は、この特定の作品に対して2回目のリファクタリングパスを行う必要はありません。ほとんどの場合、これらはオプションの依存関係(およびコンストラクタの注入パターンを利用する理由)ではなく、プロパティ注入の[Inject]デコレータを認識しています。
このような大規模なリファクタリングを考えているのは、私がresharperでタグ付けしたものです。コンストラクタパラメータを追加するための良いアプローチはありますか?コードスニペット/テンプレートはコンストラクタ内の読み取り専用プライベート変数への代入を自動的に生成し、クラスにフィールドを追加しますか?私はこれを手動で行うことができますが、このパターンが少なくとも数百例は使用されているので、これはかなり面倒で時間がかかることが予想されます。
右方向へのステップ。パート1に答えるためのいくつかの読書:http://deviq.com/explicit-dependencies-principle/パート2は、現在呼び出されている技術的負債の結果です。 – Nkosi
それは改善されていると聞いてうれしいです。退屈なリファクタリングなしでこれを修正する方法はありません。ご意見ありがとうございます。 – Miek