Следующий код представляет мои усилия в Единице работы.Видимость методов унаследованного класса не имеет смысла?
Интерфейсы:
public interface IUnitOfWork
{
IFieldRepository FieldRepository { get; }
void Save();
}
public interface IFieldRepository
{
IEnumerable<Field> GetAllFields(int page, int amount, string sortByKey, SortDirection sortDirection);
}
Бетонный блок работы класса:
public class EFUnitOfWork : IDisposable, IUnitOfWork
{
private EFDbContext context = new EFDbContext();
private IFieldRepository fieldRepository;
public IFieldRepository FieldRepository
{
get
{
if(this.fieldRepository == null)
{
this.fieldRepository = new EFFieldRepository(context);
// At this point i can see this.fieldRepository.Insert() absolutely fine
}
return fieldRepository;
}
}
// ...
Бетонный хранилище Область:
public class EFFieldRepository : EFGenericRepository<Field>, IFieldRepository
{
public EFFieldRepository(EFDbContext context)
: base(context)
{}
// ...
Бетон Generic хранилище:
public class EFGenericRepository<TEntity> where TEntity : class
{
internal protected EFDbContext context;
internal protected DbSet<TEntity> dbSet;
public EFGenericRepository(EFDbContext context)
{
this.context = context;
this.dbSet = context.Set<TEntity>();
}
public virtual void Insert(TEntity entity)
{
dbSet.Add(entity);
}
// ...
класс контроллера:
public class FieldController : Controller
{
IUnitOfWork unitOfWork;
public FieldController(IUnitOfWork unitOfWork)
{
this.unitOfWork = unitOfWork;
}
// GET: Field
public ActionResult List()
{
unitOfWork.FieldRepository.Insert(...); // This method isn't visible? But GetAllFields is visible
return View();
}
}
Проблема возникает, когда внутри моего контроллера, я не могу получить доступ к методам, которые должны быть унаследованы от моего EFFieldRepository
?
Если вы посмотрите на комментарии внутри EFUnitOfWork.FieldRepository
, я могу видеть их в этой точке
Что мешает унаследованный класс, отображающий его методы?
Как выглядит код в контроллере? – abatishchev
Теперь я добавил контроллер к OP – Jimmyt1988
Ваш метод 'Insert' должен быть невидимым в точке кода, который вы описываете. Ваше поле имеет тип 'IFieldRepository' .., который не раскрывает метод' Insert' в своем контракте, поэтому вы говорите, что это неправильно. Ваш код здесь либо неверен, либо ваш Intellisense неверен. –