Это все быстро набранный псевдокод, иллюстрирующий проблему. У меня есть базовый класс, реализующий интерфейс. Затем я наследую этот класс в двух дочерних классах, которые реализуют свои собственные интерфейсы. Наконец, я внедряю один из дочерних классов в контроллер.
Я надеялся, что смогу также вызвать методы Delete и GetSearches базового класса. как метод GetCustomerSearchResults дочернего класса. Но это не компилируется. Таким образом, очевидно, что интерфейс базового класса не может быть найден, хотя дочерний класс наследует от класса, реализующего этот интерфейс.
Как еще я могу это сделать, чтобы сохранить более общий поиск, сохраните , удалить методы в базовом классе, имея более конкретные методы типа сущности в дочернем классе, и иметь оба метода интерфейса, доступные в контроллере? Есть ли определенный шаблон проектирования, который хорошо подходит для этого?
public interface ISearchService{
Task GetSearches(int userId);
Task DeleteSearch(int id);
}
public class SearchService : ISearchService {
private IRepository _repository;
public SearchService(IRepository repository){
_repository = repository;
}
public async Task GetSearches(int userId){
return await _repository.GetUserSearches(userId);
}
public async Task DeleteSearch(int id){
await _repository.DeleteSearch(id);
}
}
public interface ISalesSearchService{
Task GetSalesSearchResults(Search search);
}
public class SalesSearchService : SearchService, ISalesSearchService{
public ISalesSearchRepository _salesRepository;
public SalesSearchService(IRepository repository, ISalesSearchRepository salesRepository) : base(repository){
_salesRepository = salesRepository;
}
public async Task GetSalesSearchResults(Search search){
return _salesRepository.GetSalesSearchResults(search);
}
}
public interface ICustomerSearchService{
Task GetCustomerSearchResults(Search search);
}
public class CustomerSearchService : SearchService, ISalesSearchService{
public ICustomerSearchRepository _customerRepository;
public SalesSearchService(IRepository repository, ICustomerSearchRepository customerRepository) : base(repository){
_customerRepository = customerRepository;
}
public async Task GetCustomerSearchResults(Search search){
return _customerRepository.GetCustomerSearchResults(search);
}
}
public class CustomerSearchController : Controller {
private ICustomerSearchService _customerSearchService;
public CustomerSearchController(ICustomerSearchService customerSearchService){
_customerSearchService = customerSearchService;
}
public async Task Delete(int id){
await _customerSearchService.Delete(1);
}
public async Task GetSearchResults(int id){
var searches = await _customerSearchService.GetSearches(_userId);
var search = searches.FirstOrDefault(x => x.Id == id);
var results = await _customerSearchService.GetCustomerSearchResults(search);
return View(results);
}
}
Подробнее здесь: https://stackoverflow.com/questions/791 ... -have-both
Как класс C# может наследовать базовый класс и интерфейс и разрешать интерфейсы обоих классов с помощью IOC? ⇐ C#
Место общения программистов C#
1729522608
Anonymous
Это все быстро набранный псевдокод, иллюстрирующий проблему. У меня есть базовый класс, реализующий интерфейс. Затем я наследую этот класс в двух дочерних классах, которые реализуют свои собственные интерфейсы. Наконец, я внедряю один из дочерних классов в контроллер.
Я надеялся, что смогу также вызвать методы Delete и GetSearches базового класса. как метод GetCustomerSearchResults дочернего класса. Но это не компилируется. Таким образом, очевидно, что интерфейс базового класса не может быть найден, хотя дочерний класс наследует от класса, реализующего этот интерфейс.
Как еще я могу это сделать, чтобы сохранить более общий поиск, сохраните , удалить методы в базовом классе, имея более конкретные методы типа сущности в дочернем классе, и иметь оба метода интерфейса, доступные в контроллере? Есть ли определенный шаблон проектирования, который хорошо подходит для этого?
public interface ISearchService{
Task GetSearches(int userId);
Task DeleteSearch(int id);
}
public class SearchService : ISearchService {
private IRepository _repository;
public SearchService(IRepository repository){
_repository = repository;
}
public async Task GetSearches(int userId){
return await _repository.GetUserSearches(userId);
}
public async Task DeleteSearch(int id){
await _repository.DeleteSearch(id);
}
}
public interface ISalesSearchService{
Task GetSalesSearchResults(Search search);
}
public class SalesSearchService : SearchService, ISalesSearchService{
public ISalesSearchRepository _salesRepository;
public SalesSearchService(IRepository repository, ISalesSearchRepository salesRepository) : base(repository){
_salesRepository = salesRepository;
}
public async Task GetSalesSearchResults(Search search){
return _salesRepository.GetSalesSearchResults(search);
}
}
public interface ICustomerSearchService{
Task GetCustomerSearchResults(Search search);
}
public class CustomerSearchService : SearchService, ISalesSearchService{
public ICustomerSearchRepository _customerRepository;
public SalesSearchService(IRepository repository, ICustomerSearchRepository customerRepository) : base(repository){
_customerRepository = customerRepository;
}
public async Task GetCustomerSearchResults(Search search){
return _customerRepository.GetCustomerSearchResults(search);
}
}
public class CustomerSearchController : Controller {
private ICustomerSearchService _customerSearchService;
public CustomerSearchController(ICustomerSearchService customerSearchService){
_customerSearchService = customerSearchService;
}
public async Task Delete(int id){
await _customerSearchService.Delete(1);
}
public async Task GetSearchResults(int id){
var searches = await _customerSearchService.GetSearches(_userId);
var search = searches.FirstOrDefault(x => x.Id == id);
var results = await _customerSearchService.GetCustomerSearchResults(search);
return View(results);
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79110509/how-can-a-c-sharp-class-inherit-from-a-base-class-and-an-interface-and-have-both[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия