Я создаю ASP многоуровневый веб-приложение, и я иметь следующую структуру:C# наследование интерфейса - не узнавая методы базового интерфейса
IService<T>
public interface IService<T> {
IEnumerable<T> GetAll();
void Add(T entity);
void Delete(T entity);
Service<T>
public class Service<T> where T : class {
private IRepository<T> _repository;
public Service(IRepository<T> repo) {
this._repository = repo;
}
public IEnumerable<T> GetAll() {
return _repository.GetAll();
}
etc
А потом У меня также есть некоторые «таможенные услуги»:
ICategoryService
public interface ICategoryService : IService<Category> {
IEnumerable<Category> GetProductCategories(int productId);
}
CategoryService
public class CategoryService : Service<Category>, ICategoryService {
private IRepository<Category> _repository;
public CategoryService(IRepository<Category> repo) : base(repo) {
this._repository = repo;
}
public IEnumerable<Category> GetProductCategories(int productId) {
// implementation
}
Контроллер:
public class ProductController : Controller {
private ICategoryService _cservice;
public ProductController(ICategoryService cservice) {
this._cservice = cservice;
}
´
// other methods
public ActionResult Categories() {
IEnumerable<Category> categories = _cservice.GetAll(); // doesn't work
}
Я пытаюсь получить доступ к методу .GetAll() в мой контроллер, который был определен в IService и внедрено в Сервис, но я получаю «ICategoryService не содержит определения для GetAll», и я понятия не имею, почему.
Я могу получить доступ к методу .GetAll() из моего сервиса CategoryService, поэтому не знаю, почему я не могу получить к нему доступ из экземпляра CategoryService (через инъекцию зависимостей).
Можете ли вы показать полный код вашего контроллера (с помощью реквизита и конструктора)? Этот код выглядит хорошо. –
Все, что я могу придумать, - это то, что у вас есть служба ICategoryService или IService, определенная дважды, и она принимает неверный интерфейс. –
Обновлено сообщение с кодом контроллера – Acla