为什么不能“表”成员实现底层接口`ITable`成员?

时间:2012-04-09 18:01:05

标签: .net linq-to-sql inheritance mocking repository

我尝试使用以下可模拟的存储库模式:

public interface IEmployeeRepository
{
    ITable<Employee> Employees { get; }
}

这表示一个能够返回ITableEmployee个对象的容器。我希望能够基于存储库创建一个模拟对象,并让我的Linq-to-Sql DataContext实现存储库接口。所以我想我可以使用partial class来声明我的DataContext类型来实现IEmployeeRepository,因为它已经有一个类型为Employees的自动生成的成员Table<Employee>

public partial class MyDataContext : IEmployeeRepository { }

我收到以下错误消息:

  

&#39; MyDataContext&#39;没有实现接口成员   &#39; IEmployeeRepository.Employees&#39 ;. &#39; MyDataContext.Employees&#39;不能   实施&#39; IEmployeeRepository.Employees&#39;因为它没有   匹配&#39; System.Data.Linq.ITable&#39;。

的返回类型

但是Table<Employee>继承了ITable<Employee>,所以它不应该是一个合适的返回类型来实现接口吗?

1 个答案:

答案 0 :(得分:2)

实现类的类型必须与接口类型完全匹配。如果您无法更改界面,则可以明确实现:

class EmployeeRepository : IEmployeeRepository
{
    // existing property
    public Table<Employee> Employees { get; }

    // explicit IEmployeeRepository property
    ITable<Employee> IEmployeeRepository.Employees { get { return Employees; } }
}