我会尽力解释这个问题,因为这对我来说有点奇怪。
我有一个C#类库,它定义了一堆将用作数据传输对象或DTO的类。
有一个Windows窗体应用程序,它引用了这个DTOs类库,还引用了另一个类库,它定义了Model - View - Presenter模式的Presenters。
此演示者类库具有对包含WCF代理类的另一个类库的引用。
WCF代理类库引用另一个类库,其中包含定义WCF服务合同的所有接口。
最后,这个包含WCF契约的库引用了第一个DTO类库,因为它们是作为方法的参数接收的。
现在在解释了这个基础结构后,问题是Windows表单项目没有编译我得到的错误:
'Proheart.EmployeeView'未实现接口成员 'Proheart.IEmployeeView.JobDescriptions'。 'Proheart.EmployeeView.JobDescriptions'无法实现 '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,我会得到一个循环引用错误。
答案 0 :(得分:1)
由于错误消息中的这一行
,我怀疑你可能在某处定义了另一个List类因为它没有匹配 返回类型 'System.Collections.Generic.List'
将光标移到List&lt;&gt;上用于查看它们是否都指向System的类。 Collections.Generic.List
答案 1 :(得分:0)
一种替代方式是允许代理类引用的DTO与从服务返回的DTO不同。这可能听起来很奇怪,但是如果你的客户端是用Java编写的话,那就是这种方式。客户端只能看到服务接口中引用的服务接口的代理版本和DTO classess的代理版本。
这减少了跨服务边界的耦合。
答案 2 :(得分:-1)
你错过了通用论点:
//This is the form in the Windows Forms project
public partial class EmployeeView : Form, IEmployeeView
{
public List<JobDescriptionDto> JobDescriptions { set { ... do something } }
}