我需要按排序順序排序問題。如何在C#IComparer類中注入存儲庫?
一個名爲問題專賣店在QuestionId和SortOrder的排序順序信息。
其他表ApplicantQuestions包含了所有的問題和答案,參考第一臺由QuestionId。
所以基本上我們想基於另一個列表對列表進行排序。
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;
}
}
這看起來很好,但是當我嘗試使用它
thisSetOfApplicantQuestions
.OrderBy(x => x.QuestionId, new QuestionOrderComparer());
智能感知需要我補充一些參數IRepository<Question>
。
如何處理?是否可以在IComparer
課程中注射?
您的構造函數需要一個'IRepository'參數。你需要將一個傳遞給構造函數。 –
是不是應該由我的StructureMap自動解決? – Blaise
調用'OrderBy'的類是否已經注入了'IRepository'實例?如果你使用的是純粹的DI(即有一個組成部分是所有東西都被注入的),那麼所有的依賴關係應該通過構造函數注入,並且深入到內部類中。否則,您可以使用服務定位器來解析比較器(但不是純粹的DI)。 – Groo