我目前正在使用存储库模式,其中我的数据模型位于返回我的域模型的存储库后面。我正在使用依赖注入来完成所有这些。我的问题是,假设我有一个我从StudentRepository获得的域模型学生。学生可能拥有我在某些地方使用的属性,而不是其他地方,例如,课程:
public class Student
{
public int ID { get; private set; }
public string Name { get; private set; }
public Student(int id, string name, IEnumberable courses = null)
{
ID = id;
Name = name;
_courses = courses;
}
private IEnumerable<Course> _courses;
public IEnumerable<Course> Courses()
{
if(_courses == null)
{
// I need a good way to load the CourseRepository
_courses = CourseRepository.GetCoursesByStudentID(ID);
}
return _courses;
}
}
因此,我想要这种类型的延迟加载设置,但我不知道如何优雅地完成它,并且我很难理解如何加载CourseRepository(或使用DI的ICourseRepository)的实现,其中我的存储库看起来像:
public class CourseRepository : ICourseRepository
{
private DbContext _db;
public CourseRepository(DbContext db)
{
_db = db;
}
public IEnumerable<DomainModels.Course> GetCoursesByStudentID(int studentID)
{
return CourseFactory.Build(_db.Courses.Where(c=>c.StudentID == studentID));
}
}
这对答案来说并不重要,但如果解决方案与Ninject有关,那将会有所帮助,因为这是我当前的DI容器。