В настоящее время я разрабатываю приложение MVC 3 с EF и шаблоном репозитория. Я создал общий интерфейс следующим образом:Использование общего интерфейса в шаблоне репозитория
interface IGenericRepository<T>
{
}
И абстрактный класс следующим образом:
abstract class GenericRepository<TContext ,T> : IGenericRepository<T>
where TContext : DbContext, new()
{
}
После того, что мой репо наследует оба так:
interface ICardRepository : IGenericRepository<Card>
{
}
и
class CardRepository : GenericRepository<EfContext, Card>,
ICardRepository
{
}
С регистрацией Unity I тер интерфейс и класс, как это:
container.RegisterType<ICardRepository, CardRepository>();
Теперь вопрос: могу ли я использовать IGenericRepository вместо ICardRepository
? Как это:
container.RegisterType<IGenericRepository<Card>, CardRepository>();
В теории я могу, но я до сих пор не понимаю, как эта схема работает, я не совсем уверен, если я не ломать или что-то отсутствует.
Спасибо за ответ. На самом деле я это знаю. Дело в том, что если я использую интерфейс, я каким-то образом нарушу шаблон? Например (я знаю, что это не так), я могу сделать тестирование сложнее, если я использую общий интерфейс. – Unknown
Ах. Я не могу думать о каких-либо потенциальных проблемах с этим. Моя единственная проблема заключается в том, какой целью будет служить интерфейс ICardRepository? Или это будет устранено в процессе? –
Я хочу избавиться от этого интерфейса и вместо этого использовать только общий интерфейс - это избавит меня от создания многочисленных копий одного и того же интерфейса с другим именем, таким как ICardRepository, ITagRepository, ISomethingElseRepository, которые в основном одинаковы. – Unknown