私が更新しようとしているこの古いコードでは、次のような依存性注入を実装しました。
public class Program
{
private IProgramRepository programRepository;
public Program(IProgramRepository repository)
{
this.programRepository = repository;
}
public Program() : this(new EN_Program()) { }
現在、このプログラムクラスではすべてのメソッドが静的であるため、すべての静的メソッドには実際には次のような 2 つのメソッドがあります。
public static List<Program> GetProgramsByUser(int userId)
{
return GetProgramsByUser(userId, GetDefaultRepository());
}
private static List<Program> GetProgramsByUser(int userId, IProgramRepository repo)
{
return repo.GetProgramsByUser(userId);
}
今、私はDIの実装についてとりわけこれを読みました:
これは依存性注入ではありません。これは実際には依存関係の逆転の原則に明らかに違反しています。原則は、「高レベルのモジュールは低レベルのモジュールに依存するべきではなく、両方とも抽象化に依存する必要があります。詳細は抽象化に依存する必要があります」と述べています。上記のコードでは、Product.cs 自体が EN_Program オブジェクトを作成します。したがって、IProgramRepository の実装 (EN_Program) に直接依存します。将来、IProgramRepository インターフェイスの別の実装が行われる場合、Product.cs コード自体を変更する必要があります。そのため、適切な方法ではないことが調査されています。
古い開発者は、コントローラーに何も注入せずに、ヘルパー クラス (Program.cs) から始めて DI を実装したかったようです。
この古いコードが正しく書かれていないと仮定するのは正しいですか? DI を実装する場合、コントローラーからバックエンドまですべてにインジェクションが必要ですか?
元。コントローラーには、ヘルパー クラスが使用するインターフェイス (Program.cs) を挿入する必要があります。次に、リポジトリが使用するインターフェイスを Program.cs に挿入します。