По сути, у меня есть:
Код: Выделить всё
interface IRepository where T : class
{
//...
}
class Repository where T : class
{
//Implemented methods
}
interface IFooRepository
{
IQueryable GetFoos();
}
class FooRepository : Repository, IFooRepository
{
IQueryable GetFoos() {}
}
Код: Выделить всё
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();
}
}
Код: Выделить всё
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;
}
Подробнее здесь: https://stackoverflow.com/questions/156 ... -a-factory
Мобильная версия