具有 none 个通用对象参数的通用接口

Generic interface with none generic object argument

如何使我的存储库具有 通用接口,其搜索方法采用 不同 类型作为参数?

我试着给我的界面这个 属性:

 Task<IEnumerable<T>> Search(object Query, int? limit);

例如 UsersController 想要在使用 IRepository<User> 时发送 SearchUserQuery(属性 ID、名称和电话号码)作为参数.但是 CompanyController 在使用 IRepository<Company>.[=15= 时需要发送 SearchCompanyQuery (具有属性 guid、名称、税号)作为参数]

问题

当我将 Search 方法添加到存储库时(参见下面的示例),它不会将 SearchUserQuery 识别为对象,并给我编译错误。

 Task<IEnumerable<User>> Search(SearchUserQuery query, 100);

您的实现方法与接口签名非常匹配完全

如果查询不同,这必须反映在界面中:

interface IRepository<T, TQuery>
{
    Task<IEnumerable<T>> Search(TQuery query, int? limit);
}

然后你的实现:

class UserRepository : IRepository<User, SearchUserQuery>
{
    Task<IEnumerable<User>> Search(SearchUserQuery query, int? limit) // ...
}