Передача интерфейса класса вызывает ошибки, но передача только класса работает нормально - PullRequest
0 голосов
/ 12 апреля 2011

У меня есть два класса:

DefectsController

public abstract class DefectsController<TDefect, TDefectService> :
    ApplicationController<DefectsController<TDefect, TDefectService>, TDefect>
    where TDefectService : IEntityService<TDefect>
    where TDefect : Defect
{
    private readonly TDefectService defectService;


    public DefectsController(TDefectService defectService)
        : base(defectService)
    {
        this.defectService = defectService;
    }
}

и JobDefectsController (есть и другие части, это всего лишь примеры)

public class JobDefectsController : DefectsController<JobDefect, IEntityService<JobDefect>>
{
    public JobDefectsController(EntityService<JobDefect> service)
        : base(service)
    {
    }
}

Для некоторыхпричина, если я изменяю конструктор JobDefectsController на использование IEntityService вместо этого, тогда, если я пытаюсь получить доступ к defectService в DefectsController, он выдает неизвестные ошибки.

Редактировать: Эта ошибка: Количество предоставленных общих аргументов не равно арностиопределения общего типа.
Имя параметра: экземпляр

Раньше существовал класс с именем JobDefectsService, унаследованный от IEntityService<JobDefect>, и интерфейс этого (IJobDefectService) мог использоваться вместоIEntityService<JobDefect> и EntityService<JobDefect> без проблем.

Кто-нибудь может понять, в чем проблема?

Спасибо,
Гарольд

Ответы [ 2 ]

0 голосов
/ 13 апреля 2011

Исправлена ​​проблема, это была проблема с IEntityService, в которой не было функции Query, тогда как EntityService делал.Я не осознавал, что эти классы были построены в рамках проекта, и теперь чувствую себя немного глупо.

Ну да ладно, спасибо в любом случае!

0 голосов
/ 12 апреля 2011

Ваш параметр конструктора и ваш параметр второго класса должны быть одного типа. То есть TDefectService.

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

public class JobDefectsController : DefectsController<JobDefect, IEntityService<JobDefect>>
{
    public JobDefectsController(IEntityService<JobDefect> service)
        : base(service)
    {
    }
}

Чтобы использовать конкретный класс, нужно сделать это ...

public class JobDefectsController : DefectsController<JobDefect, EntityService<JobDefect>>
{
    public JobDefectsController(EntityService<JobDefect> service)
        : base(service)
    {
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...