Шаблон единицы работы — получение репозиториев с помощью фабрикиC#

Место общения программистов C#
Ответить
Anonymous
 Шаблон единицы работы — получение репозиториев с помощью фабрики

Сообщение Anonymous »

Я следую руководству по использованию шаблона репозитория в сочетании с шаблоном Unit Of Work.
По сути, у меня есть:

Код: Выделить всё

interface IRepository where T : class
{
//...
}
class Repository where T : class
{
//Implemented methods
}
interface IFooRepository
{
IQueryable GetFoos();
}
class FooRepository : Repository, IFooRepository
{
IQueryable GetFoos() {}
}
Вышеуказанное представляет мои репозитории в базовом смысле. Затем у меня есть класс Uow.

Код: Выделить всё

public class MyUow
{
public void Commit() { }
public IRepository Bars { get { return GetStandardRepo(); } }
public IFooRepository Foos { get { return GetRepo(); } }
private IRepository GetStandardRepo()
{
return RepositoryProvider.GetRepoistoryForEntityType();
}
private T GetRepo()
{
return RepositoryProvider.GetRepository();
}
}
Моя проблема заключается в том, что в учебнике, которому я следую, экземпляр Dictionairy создается только в классе RepositoryProvider и, похоже, не заполняет его, поэтому метод, используемый в GetRepo, не работает.

Код: Выделить всё

public virtual T GetRepository(Func factory = null) where T : class
{
//Look for T in the dictionairy by typeof(T)
object repoObj;
Repositories.TryGetValue(typeof(T), out repoObj);
if (repoObj != null)
return (T)repoObj;
//Not found or a null value, make a new instance of the repository.
return MakeRepository(factory, Context);
}
private T MakeRepository(Func factory, DbContext dbContext) where T : class
{
var f = factory ?? _repositoryFactories.GetRepositoryFactory();
if (f == null)
//Exception here because this is null
throw new NotImplementedException("No factory for repository type");
var repo = (T)f(dbContext);
Repositories[typeof(T)] = repo;
return repo;
}
По сути, мой вопрос заключается в том, как правильно реализовать этот шаблон и где я ошибаюсь? Должен ли я создать экземпляр Dictionairy

Подробнее здесь: https://stackoverflow.com/questions/156 ... -a-factory
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»