зачем нужен конструктор GenericRepository и какова его роль?
Поскольку вам нужно внедрить реализацию IDbFactory
в GenericRepository
, чтобы она заработала. Кроме того, вы ищете абстракцию , как создается экземпляр DbContext
с использованием фабрики, поэтому вы не хотите видеть, как создается сама фабрика.
IMO, фактическое использование IDbFactory
кажется уродливым, чтобы просто избегать некоторых строк, и это может быть решено следующим образом (что, на самом деле, экономит больше строк!):
public class GenericRepository<T> : IGenericRepository<T> where T : class
{
public GenericRepository(IDbFactory dbFactory)
{
DbContext = new Lazy<DBCustomerEntities>(dbFactory.Init);
}
protected Lazy<DBCustomerEntities> DbContext { get; }
public IQueryable<T> GetAll() => DbContext.Value.Set<T>();
.......
Если вам нужно инициализировать что-то один раз, только если вы обращаетесь к нему, вы должны использовать Lazy<T>
.
Есть еще одна вещь, которая выглядит менее многообещающей, и это то, что вы создаете хранилище, опираясь на IQueryable<T>
. Пожалуйста, ознакомьтесь с другими вопросами и ответами: Шаблон проектирования репозитория , чтобы получить больше информации по этой теме.