具有 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) // ...
}
如何使我的存储库具有 通用接口,其搜索方法采用 不同 类型作为参数?
我试着给我的界面这个 属性:
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) // ...
}