Интерфейсы, которые наследуются от базового интерфейса - PullRequest
23 голосов
/ 15 декабря 2011

Сценарий:

Я использую ASP.NET MVC 3 и C #. У меня есть много служб, у всех есть метод Init ().

Итак, я думал, что наследство - мой новый лучший друг. Я пытался наследовать интерфейсы от других интерфейсов.

Однако у меня проблемы.

Что я сделал:

Насколько я понимаю, один интерфейс может наследоваться от другого интерфейса. то есть, вы можете сделать это:

public interface ICaseService : IBaseService
{
    CaseViewModel ViewModel { get; }

    Case Case { get; set; }
}

Где:

public interface IBaseService
{
    void Init();
}

Поэтому, когда я получаю CaseService из ICaseService, мне нужно будет реализовать метод Init(), а также свойство Case и свойство ViewModel.

Проблема:

Допустим, у меня теперь есть контроллер, имеющий ссылку на ICaseService:

private readonly ICaseService service;

В своих действиях я считаю, что должен уметь:

public virtual ActionResult MyAction()
{
    service.Init();
}

Но я получаю сообщение об ошибке, в котором говорится, что ICaseService 'не содержит определения для Init().

Вопросы:

  1. Почему?

  2. Должен ли я забыть о наследовании интерфейсов от интерфейсов и просто ввести в каждом определении интерфейса метод Init()?

Примечание:

Выше приведен упрощенный сценарий. Мой «базовый» интерфейс содержит гораздо больше определений, чем просто Init ().

1 Ответ

11 голосов
/ 15 декабря 2011

В цепочке наследования я совершил несколько глупостей, слишком много и слишком глупых, чтобы подробно здесь описывать. Смысл в том, что это работает, что было неправильно, была цепочка.

Когда я посмотрел на MSDN, не было простого примера этой простой техники, подтверждающей мое понимание, не говоря уже о реальной документации такого рода использования наследования с интерфейсами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...