私はクラスにDIを実装しようとしていますが、自分の設計が適切であるとは確信していません。DIを特定の状況で実装する
私はちょうど私がこのような状況でDIを実装する方法を取得しない
public partial class Doer
{
private static readonly DoerRepository repository = new DoerRepository();
public static IEnumerable<Doer> GetActiveDoers()
{
return repository.Doers.Where(c => c.Person.IsActive);
}
}
私は
class DoerValidation
{
public DoerValidation()
{
compileData();
}
private void compileData()
{
doersActive = Doer.GetActiveDoers();
//...
}
}
にDIを追加したいクラスのそして、私のDoer
クラスのreleventコード。たぶんGetActiveDoers
方法が悪い設計ですか?そうでない場合は、どこにこのメソッドを配置しますか?
新しいメソッドをリポジトリに直接追加することをお勧めしますか?コンストラクタに渡し - 一部の人々は、それはあなたが基本的にDoerValidation
にDoerRepository
を注入する必要があるようですねこれだけ
public interface IDoerRepository
{
IQueryable<Doer> Doers { get; }
void SaveDoer(Doer doer);
void DeleteDoer(Doer doer);
}
ありがとうございます。この場合の原則については少し説明してください。 – Mathieu
+1「DIの原則」もっと同意できませんでした。 –
@Mathieu: 'DoerValidation'は' DoerRepository'に効果的です。それをコンストラクタに渡して注入します。 'GetActiveDoers'をインスタンスメソッドとして' DoerRepository'自体に置きます。そうしなければならない場合は、拡張メソッドにすることもできます。 –