Проблема с многократной ссылкой на библиотеку классов - PullRequest
0 голосов
/ 18 апреля 2009

Я постараюсь объяснить проблему как можно лучше, поскольку это немного странно для меня.

У меня есть библиотека классов C #, которая определяет группу классов, которые будут использоваться в качестве объектов передачи данных или DTO.

Есть приложение Windows Forms, которое имеет ссылку на эту библиотеку классов DTO, а также ссылку на другую библиотеку классов, которая определяет Presenters для шаблона Model - View - Presenter.

Эта библиотека классов презентаторов имеет ссылку на другую библиотеку классов, которая содержит прокси-классы WCF.

Библиотека классов WCF proxys содержит ссылку на другую библиотеку классов со всеми интерфейсами, которые определяют контракты для служб WCF.

Наконец, эта библиотека с контрактами WCF имеет ссылку на первую библиотеку классов DTO, поскольку они принимаются в качестве параметров для методов.

Теперь, после объяснения этой инфраструктуры, проблема в том, что проект формы Windows не компилирует ошибку, которую я получаю:

Proheart.EmployeeView не реализует элемент интерфейса 'Proheart.IEmployeeView.JobDescriptions'. «Proheart.EmployeeView.JobDescription» не может реализовать 'Proheart.IEmployeeView.JobDescriptions' потому что у него нет соответствующего возвращаемого типа 'System.Collections.Generic.List'.

В основном код выглядит так:

//This interface is defined on the Presenters class library.
public interface IEmployeeView  
{  
   List<JobDescriptionDto> JobDescriptions { set; }
}

//This is the form in the Windows Forms project
public partial class EmployeeView : Form, IEmployeeView  
{
   public List<JobDescriptionDto> JobDescriptions { set { ... do something } }
}

Пожалуйста, мне нужна помощь. Я знаю, что разделение всех библиотек классов может показаться странным, но это из-за стратегии развертывания.

Спасибо.

PS Раньше я не упоминал, что библиотека классов Presenter НЕ имеет ссылки на библиотеку DTO, а также прокси служб WCF. Кажется, он извлекается из библиотеки классов Service Interfaces, так как, если я вручную добавлю его в Presenter, я получу ошибку циклической ссылки.

Ответы [ 3 ]

1 голос
/ 18 апреля 2009

Я подозреваю, что у вас может быть другой класс List, определенный где-то из-за этой строки в сообщении об ошибке

потому что у него нет соответствия возвращаемый тип 'System.Collections.Generic.List'

Наведите курсор на класс List <>, чтобы увидеть, ссылаются ли они оба на System. Collections.Generic.List

0 голосов
/ 19 апреля 2009

Один из альтернативных стилей - разрешить DTO, на которые ссылаются прокси-классы, не совпадать с DTO, возвращаемыми из службы. Это может звучать странно, но это так, как если бы ваш клиент был написан на Java, например. Клиент будет видеть только прокси-версии служебных интерфейсов и прокси-версии класса DTO, указанные в служебных интерфейсах.

Это уменьшает связь через сервисную границу.

0 голосов
/ 18 апреля 2009

Вы пропустили общий аргумент:

//This is the form in the Windows Forms project
public partial class EmployeeView : Form, IEmployeeView  
{
   public List<JobDescriptionDto> JobDescriptions { set { ... do something } }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...