我有一個項目,我遇到了循環引用問題。Autofac,循環引用和設計解決外鍵問題
我有一個「事件」對象,我可以有一個「問題」對象列表 我有一個「問題」對象,我可以從中獲取父「事件」。
如果我使用實體框架,它將由框架管理,但我有一個要求,不要使用實體框架,出於某種原因,從我的客戶。所以,我試圖模擬EF的行爲,因爲我很確定他們最終會感覺到並讓我使用EF。下面是我如何進行
public class EventRepository : AbstractRepository<Event>, IEventRepository
{
private readonly IQuestionRepository questionRepository;
public EventRepository(IContext context, IQuestionRepository questionRepository)
{
this.questionRepository = questionRepository;
}
public Event GetNew(DataRow row)
{
return new GeEvent(this.questionRepository) { // Load the event from the datarow }
}
public class GeEvent : Event
{
private readonly IQuestionRepository questionRepository;
public GeEvent(IQuestionRepository questionRepository)
{
this.questionRepository = questionRepository;
}
public override List<Question> Questions { get { return this.questionRepository.GetByIdEvent(this.IdEvent); }}
}
}
public class QuestionRepository : AbstractRepository<Question>, IQuestionRepository
{
private readonly IEventRepository eventRepository;
public QuestionRepository(IContext context, IEventRepository eventRepository)
{
this.eventRepository = eventRepository;
}
public Question GetNew(DataRow row)
{
return new GeQuestion(this.eventRepository) { // Load the question from the datarow }
}
public class GeQuestion : Question
{
private readonly IEventRepository eventRepository;
public GeQuestion(IEventRepository eventRepository)
{
this.eventRepository = eventRepository;
}
public override Event Event { get { return this.eventRepository.Get(this.IdEvent); }}
}
}
所以,你可以看到,我有「先有雞還是先有蛋」的情況。要創建一個EventRepository,它需要一個QuestionRepository並創建一個QuestionRepository,它需要一個EventRepository。除了直接使用DependencyResolver(這會使存儲庫(和服務)無法正確測試)之外,我如何管理依賴關係,以便可以加載我的外鍵「一個」實體框架?
順便說一句,我已簡化了外鍵的「延遲加載」,以保持示例簡單。
BTW2我使用Autofac,如果它可以幫助任何事情。
謝謝
感謝您的回答。我知道,設計並不理想。我通常會使用實體框架,但客戶完全反對,因爲他說,他的程序員已經有很多東西要學,EF會太過分了......嗯...... EF會照顧所有這些非 - 但是你知道......客戶是國王。 我認爲我必須去財產二傳手,直到客戶端來到它的感官,並允許我使用EF。 再次感謝您的答案。 –