ASP.NET MVC 응용 프로그램 (.NET 3.5, ASP.NET MVC 1.0 및 Entity Framework 사용)을 개발하면서 Repository Pattern
을 이해하려고합니다. 의존성 주입과 하나의 Controller 및 하나의 Entity 유형을 모두 사용하기에 충분했지만 이제는 다른 유형 간의 관계에 대한 지원을 구현할 때까지 갇혀 있습니다.C#에서 인터페이스의 상속 된 메서드 이름 바꾸기
내가 본 모든 예에서 저장소 인터페이스는 IContactsRepository
과 같으며 Contact
항목에만 관련된 (CRUD) 메서드가 포함되어 있습니다. Contacts
의 그룹화를 구현하기 위해 Group
이라는 엔티티 유형과 그룹에 대한 처리 (CRUD) 작업을위한 IGroupRepository
인터페이스가 있습니다.
-
이 속하는 방법은 (예를 들어,이 경우의
- ? 다음,
ITypedRepository<T> { IEnumerable<T> GetAll(); T Get(int id); bool Add(T newObj); bool Edit(T editedObj); bool Delete(int id); } IContactsRepository : ITypedRepository<Contact> { } IGroupsRepository : ITypedRepository<Group> { bool AddToGroup(int contactId, int groupId); } IRepository : IContactsRepository, IGroupsRepository
난 후
IRepository
상속 마스터 저장소를 만들려고 :
Group
에
Contact
추가 방법
AddToGroup
) 하나 개 이상의 항목 유형에 관한 것이다 않는
난 I는 다음과 같은 인터페이스를 생성 리포지터리 큰 유전 구조물을 시도
public class EntitiesRepository : IRepository
{
IEnumerable<Contact> IRepository<Contact>.Get()
{
throw new NotImplementedException();
}
IEnumerable<Group> IRepository<Group>.Get()
{
throw new NotImplementedException();
}
// Etc. All methods were generated by hitting [Ctrl]+[.] with the cursor on
// the interface inheritance reference to IRepository and selecting
// "Explicitly implement IRepository"
}
이 코드로 내 컨트롤러에서 리포지토리의 메서드 중 하나를 호출하려고하면
(210)var contacts = _repository.Get();
나는 IContactsRepository
및 IGroupsRepository
로 얻었 Get<Group>()
를 통해 상속 Get<Contact>()
사이의 모호함에 대해 빌드 오류 메시지가 표시됩니다. 나는 이것이 허용되지 않는다는 것을 이해했다. IRepository
inherits the same generic interface with different types (링크 된 기사의 예제 5 참조). 나는 다른 인터페이스를 통해 상속 이후
지금, 나는 다음과 같은 예를 들어, 이러한 방법 "이름을 오버라이드 (override)"수있는 기회가있다?
IContactsRepository : ITypedRepository<Contact> { IEnumerable<Contact> GetContacts = ITypedRepository<Contact>.Get(); ... }
그런 식으로, 나는 어떤 모호함없이 IRepository.Getcontacts
에서 액세스 할 수 있습니다. 가능합니까? 아니면이 문제에 대한 해결 방법이 있습니까? 설명에 대한
그리고 새로운 질문 :
컨트롤러 내가 원하는
Get()
방법의 어떤에서 통화에서 지정한 어쨌든이 있나요?처음 문제를 해결하는 가장 좋은 방법은 무엇입니까? 하나의 엔티티 유형 대신 많은 것을 처리하는 저장소가 필요합니까?
편집 : Controller
에서 추가 코드 Repository
클래스의 예와를 호출합니다.
명시 적 인터페이스 구현을 고려하십시오. 자세한 내용은 http://stackoverflow.com/questions/1077816/access-modifiers-on-properties-in-c –
답장을 보내 주셔서 감사합니다. 해명을위한 노력을 기울였습니다. –
이 질문에 대한 답변을 매번 한 번씩 올리겠습니다. –