質問を並べ替える必要があります。C#IComparerクラスにリポジトリを挿入するには?
一つのテーブルの名前質問店QuestionIdとSORTORDERでのソート順情報。
他のテーブルApplicantQuestionsはQuestionIdすることにより、第1のテーブルを参照し、すべての質問と回答が含まれています。
したがって、基本的に別のリストに基づいてリストを並べ替える必要があります。
public class QuestionOrderComparer : IComparer<int>
{
private readonly IRepository<Question> _Questions;
public QuestionOrderComparer(IRepository<Question> Questions)
{
_Questions = Questions;
}
public int Compare(int x, int y)
{
var questionsInOrder = _Questions.All
.Select(q => new QuestionOrderModel(q.QuestionId, q.SortOrder))
.ToList();
var xValue = questionsInOrder.FirstOrDefault(q => q.Id == x)?.SortOrder ?? 0;
var yValue = questionsInOrder.FirstOrDefault(q => q.Id == y)?.SortOrder ?? 0;
return xValue - yValue;
}
}
罰金に見えますが、私はインテリセンスがIRepository<Question>
ためのいくつかのパラメータを追加するために私を必要とし、それを
thisSetOfApplicantQuestions
.OrderBy(x => x.QuestionId, new QuestionOrderComparer());
を使用しようとします。
これに対処するにはどうすればよいですか? IComparer
クラス内に注射が可能ですか?
あなたのコンストラクタは 'IRepository'パラメータを必要とします。 1つをコンストラクタに渡す必要があります。 –
私のStructureMapによって自動的に解決されるはずですか? – Blaise
'OrderBy'を呼び出すクラスに既に' IRepository'インスタンスが挿入されていませんか?純粋なDIを使用している場合(つまり、すべてが注入されている構成ルートがある場合)、すべての依存関係はコンストラクタを介して注入され、より深い内部クラスに渡されます。それ以外の場合は、サービスロケータを使用して比較元(純粋なDIではありません)を解決できます。 – Groo